【发布时间】: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