Python 在Postgresql中插入特殊字符的问题

Python 在Postgresql中插入特殊字符的问题,python,sql,postgresql,sql-insert,psycopg2,Python,Sql,Postgresql,Sql Insert,Psycopg2,我已经创建了一个包含以下列的测试表:id:int、status:string和payload:jsonb 我在元组中有要插入测试表的值: record=(1234567, 'ERROR','{"header": "Response", "status": "Err", "Details": "Replace ''Jonh''s Assoc.'' → ''Jonh''s Civil Ass

我已经创建了一个包含以下列的测试表:id:int、status:string和payload:jsonb

我在元组中有要插入测试表的值:

record=(1234567, 'ERROR','{"header": "Response", "status": "Err", "Details": "Replace ''Jonh''s Assoc.'' → ''Jonh''s Civil Assoc."}')
将记录传递给游标以执行:

cur.execute('insert into test VALUES {};'.format(record))
执行查询后,insert语句如下所示:

insert into test VALUES (1234567, 'ERROR','{"header": "Response", "status": "Err", "Details": "Replace \'\'John\'\'s Assoc.\'\' → \'\'John\'\'s Civil Assoc."}');
如果您注意到,字符串正在向每个引号添加反斜杠。因此,我最终犯了以下错误:

(psycopg2.errors.SyntaxError) syntax error at or near "\"
"Details": "Example: Replace \'\'John\'\'s...
                                                             ^
我们将非常感谢您的帮助


谢谢在SQL中,一个引号被另一个引号转义,而不是反斜杠。我建议使用合法的而不是python字符串格式化方法,这样数据库驱动程序就可以为您正确地处理转义

cur.execute('insert into test(id, status, payload) VALUES (?, ?, ?)', record);
如果愿意,您甚至可以单独强制转换参数(尽管此处不需要):


在SQL中,一个单引号由另一个单引号转义,而不是反斜杠。我建议使用合法的而不是python字符串格式化方法,这样数据库驱动程序就可以为您正确地处理转义

cur.execute('insert into test(id, status, payload) VALUES (?, ?, ?)', record);
如果愿意,您甚至可以单独强制转换参数(尽管此处不需要):


设置简单字符串(如
测试字符串
的格式时,正确的做法是添加
\'
以使
\'Test string\'
。但是,当将JSON作为字符串传递时,字符串具有多个级别,因此添加
\'
将影响预期的语法

因为在给定字符串中调用format函数只是在第一级提供正确的格式,所以更复杂的字符串会受到影响并收到
\'
。因此,我最终从字符串中删除了
\'
,以使其正常工作

我不喜欢这种变通方法,但我会一直应用它,直到得到更好的解决方案:

 cur.execute('insert into test VALUES {};'.format(record).replace("\\", "")

谢谢

当格式化一个简单的字符串(如
测试字符串
时,将
\'
添加为
\'Test string\'
是正确的。但是,当将JSON作为字符串传递时,字符串具有多个级别,因此添加
\'
将影响预期的语法

因为在给定字符串中调用format函数只是在第一级提供正确的格式,所以更复杂的字符串会受到影响并收到
\'
。因此,我最终从字符串中删除了
\'
,以使其正常工作

我不喜欢这种变通方法,但我会一直应用它,直到得到更好的解决方案:

 cur.execute('insert into test VALUES {};'.format(record).replace("\\", "")

谢谢

。。。“issues”:[{“issue”:“one”:[{“Details”:…
:这不是有效的JSON开头。
…“issues”:[{“issue”:“one”:[{“Details”:…
:这不是有效的JSON开始。获取以下错误:AttributeError:“tuple”对象没有属性“Key”。我已搜索,但没有关于此错误的线索。获取以下错误:AttributeError:“tuple”对象没有属性“Key”。我已搜索,但没有关于此错误的线索。