【问题标题】:How to simulate DELETE keystroke inside a string? [duplicate]如何在字符串中模拟 DELETE 击键? [复制]
【发布时间】:2021-02-08 20:56:05
【问题描述】:

我使用创建临时表(sqlalchemy 和 pandas)的框架。

但是,它创建了一个用引号括起来的表,在我的例子中,我使用的是 Sybase,它返回一个权限错误。

当我手动创建时,没有引号的效果很好。

为了解决这个问题,我把 \b 放在字符串的开头:

table_name=f'\b{table_name}'

当我使用 \b 进行测试时,它会删除左引号,但我找不到删除右引号的方法。

Obs:我已经测试过 table_name=f'\b{table_name}' + \u'\u007f'

例如:

table_name="#test"
df.to_sql(con=engine,name=table_name,index=False)

生成以下创建:

CREATE TABLE "#test" (nome TEXT NULL)

我遇到了错误,因为引号。

但是,使用此代码,我可以删除左引号:

table_name="\b#test"
df.to_sql(con=engine,name=table_name,index=False)

它生成:

CREATE TABLE #test" (nome TEXT NULL)

谢谢

【问题讨论】:

  • 如果你有表格字符串,为什么不直接做 table_name[1:-1] 呢?这会从字符串中删除第一个和最后一个字符(假设它的 >1 个字符长)
  • \b 将使左引号出现在呈现到终端时被删除。这并不意味着它真的消失了;引号 退格键都在您的数据中,并且可能会要求您的数据库服务器创建一个名称中包含两个字符的表。
  • 我的问题是pandas函数to_sql,因为当我将表名作为参数传递时,它会自动在表名周围添加引号
  • 请用您收到的完整错误消息更新问题;如果您遇到“权限错误”或语法错误(即双引号的存在),我不清楚(对我来说)
  • 还有,哪个 Sybase RDBMS 产品(ASE?IQ?SQLAnywhere?Advantage?)和版本?

标签: python pandas sqlalchemy sybase


【解决方案1】:

我的问题是熊猫函数to_sql,因为当我将表名作为参数传递时,它会自动在表名周围添加引号

您似乎正在使用 Sybase 的内部 SQLAlchemy 方言,该方言正在被我维护的 external SAP ASE (Sybase) dialect 取代。 #temp 表的 DDL 呈现问题已在 version 1.0.1 中修复。

【讨论】:

    【解决方案2】:

    假设这是 Sybase ASE,并且 OP 收到的错误与使用引号的语法问题有关,请考虑:

    • 在(表/列)名称周围使用双引号(在 ASE 中)称为带引号的标识符
    • ASE 的默认行为是将带引号的标识符设为 off(即,如果在(表/列)名称周围使用双引号,则会生成错误)
    • 为了使用带引号的标识符,客户端应用程序需要通过连接参数或显式命令set quoted_identifier on 显式启用带引号的标识符
    • ASE 还支持在(表/列)名称周围使用方括号 ([]),另外还有一个好处是无需显式使用 set quoted_identifier on

    再次,假设这是 Sybase ASE,我想知道客户端应用程序 a) 是否能够使用方括号 ([]) 代替双引号或 b) 能够启用quoted_identifier support 或 c) 能够禁用带引号的标识符(即,not 将名称用双引号括起来)。

    【讨论】:

      【解决方案3】:

      如果您可以访问字符串本身,您可以随时对其进行切片以删除您想要的任何字符。要删除第一个和最后一个:

      >>> table_name = '"some test table"'
      >>> table_name[1:-1]  # No surrounding " characters.
      some test table
      

      将删除字符添加到字符串(您当前拥有的)只会影响控制台输出。这些字符仍然存在。

      【讨论】:

      • 我的问题是pandas函数to_sql,因为当我将表名作为参数传递时,它会自动在表名周围添加引号
      • 您介意将该信息添加到您的帖子中吗?我去看看
      • 我已经编辑了我的帖子以提供更多详细信息
      猜你喜欢
      • 2014-06-22
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多