在python字符串变量中包括单引号和双引号

在python字符串变量中包括单引号和双引号,python,Python,我正试图通过python psycopg2在postgres中进行插入。我需要在插入的字符串中同时包含单引号和双引号。 这是我的代码: table_name = "my_table" values_to_insert = ["""O'neal""", '''"The Film "'''] column_name_list = ["UpperAndLowercase", "otherColumn"] "INSERT INTO {} ".format(table_name) + ", ".join

我正试图通过python psycopg2在postgres中进行插入。我需要在插入的字符串中同时包含单引号和双引号。 这是我的代码:

table_name = "my_table"
values_to_insert = ["""O'neal""", '''"The Film "''']
column_name_list = ["UpperAndLowercase", "otherColumn"]

"INSERT INTO {} ".format(table_name) + ", ".join(['''"{}"'''.format(i) for i in 
column_name_list]) + " VALUES(" + ", ".join("""'''{}'''"""
.format(i).encode("utf-8").decode('unicode_escape') for i in values_to_insert)
我预料到:

'INSERT INTO my_table "UpperAndLowercase", "otherColumn" VALUES('''O'neal''', '''"The Film "''''
但我明白了:

'INSERT INTO my_table "UpperAndLowercase", "otherColumn" VALUES(\'\'\'O\'neal\'\'\', \'\'\'"The Film "\'\'\''

您正在使用python解释器吗?注意下面x与printx的对比

如果我把你的代码放在一个脚本中并打印出来,我会觉得很好

>>> table_name = "my_table"
>>> values_to_insert = ["""O'neal""", '''"The Film "''']
>>> column_name_list = ["UpperAndLowercase", "otherColumn"]
>>> 
>>> x = "INSERT INTO {} ".format(table_name) + ", ".join(['''"{}"'''.format(i) for i in
... column_name_list]) + " VALUES(" + ", ".join("""'''{}'''"""
... .format(i).encode("utf-8").decode('unicode_escape') for i in values_to_insert)
>>> x
'INSERT INTO my_table "UpperAndLowercase", "otherColumn" VALUES(\'\'\'O\'neal\'\'\', \'\'\'"The Film "\'\'\''
>>> print(x)
INSERT INTO my_table "UpperAndLowercase", "otherColumn" VALUES('''O'neal''', '''"The Film "'''
>>> 
还请注意,您可以只使用triple,而不使用'


您可以大大简化代码:

table_name = "my_table"
values_to_insert = ["O'neal", '"The Film "']
column_name_list = ["UpperAndLowercase", "otherColumn"]

print "INSERT INTO {} ".format(table_name) + ", ".join(['"{}"'.format(i) for i in column_name_list]) + " VALUES(" + ", ".join(["'''{}'''".format(i) for i in values_to_insert])
输出您想要的结果:

INSERT INTO my_table "UpperAndLowercase", "otherColumn" VALUES('''O'neal''', '''"The Film "'''

为什么在同一行上进行编码和解码。不应涉及unicode_escape。使用查询参数。如果您的列名不是用户提供的,则不需要转义它;如果是,为什么?这不是你两小时前发布的同一个问题吗?@Ry-不确定我是否收到了你的问题。我的列名在列表变量中,但最终它们需要显示在双引号之间的字符串中,原因是我需要在postgres列名中包含上下字符,因此每当我调用它们时,它们都需要在双引号之间。是密切相关的…并不是说任何人都应该在生产中使用此代码;使用字符串连接将值替换到SQL查询中容易产生重大的安全风险。那一定是psycopg2的问题,因为当我运行cursor ex:cursor.executex时,它不会以这种方式读取字符串。
INSERT INTO my_table "UpperAndLowercase", "otherColumn" VALUES('''O'neal''', '''"The Film "'''