【问题标题】:Force python to use ' instead of " for strings强制python使用'而不是'作为字符串
【发布时间】:2019-10-01 03:10:22
【问题描述】:

我有一个脚本,它使用 psycopg2 库将数据从一个数据库迁移到另一个用 python 和 sql 编写的数据库。

我从第一个数据库中检索一个字符串并将其存储在列表中,以便在完成收集所需的所有数据后将其放入第二个数据库中。

如果字符串中有撇号,那么 python 将使用“”表示字符串。问题在于 sql 将“”解释为指定列名,将“”解释为字符串,而 python 将两者都解释为字符串。我希望强制 python 使用撇号来表示字符串(或其他合适的解决方法)

谷歌没有发现任何东西。当您的字符串中有撇号时,甚至找不到提及python将使用“”的事实。我考虑过用不同的字符替换字符串中的撇号,然后再将其转换回来,但这似乎是一个笨拙的解决方案。

例如

MyString = 'it\'s'
MyList = [MyString]
print(MyList) # returns "it's"
print(MyList[0]) # returns it's

当我将新值插入数据库时​​,我将整个列表作为值插入。

INSERT INTO table VALUES MyList

这是错误出现的地方,因为字符串使用“”而不是“”。 python 或 sql 端的解决方案都可以。

【问题讨论】:

  • 这是XY problem。不仅仅是因为这个问题,还有很多其他原因,你应该使用parametrised SQL statements,这使得这个问题没有意义。来自 psycopg2 文档:“警告: Never, never, NEVER 使用 Python 字符串连接 (+) 或字符串参数插值 (%) 将变量传递给 SQL查询字符串。甚至在枪口下也没有。” (psycopg2 文档有点旧,或者它们也包含 f 字符串。)

标签: python sql postgresql psycopg2


【解决方案1】:

找到了解决办法。这有点笨拙,但它有效。将列表转换为字符串。像这样使用替换功能:

    MyString = MyString.replace('"',"'")

然后改用那个字符串。

【讨论】:

  • 我有相反的要求,从 ' 到 " 基本上是为了创建一个有效的 JSON 字符串。我认为字符串 API 中应该有一个选项来传递要使用的引号。
猜你喜欢
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 2021-11-15
  • 1970-01-01
  • 2019-04-25
相关资源
最近更新 更多