Python 在Postgresql中插入特殊字符的问题
我已经创建了一个包含以下列的测试表:id:int、status:string和payload:jsonb 我在元组中有要插入测试表的值: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
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”。我已搜索,但没有关于此错误的线索。