1

我有一个名为评论的字段。我正在有效地尝试将一个大表中的值读取到多个表中。因此,我的选择查询为我获取评论字段。

我正在构建一个 Python 脚本来执行从表到表的复制。由于单引号,我的插入查询在遇到诸如“对不起!我们无法处理您的订单”之类的评论字段时失败。

我曾尝试使用 $ 引号,但徒劳无功

这是我正在尝试的

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect("dbname='postgres' user='postgres' host='localhost' )
mark=conn.cursor()
/* fectching the rows and doing other stuff */

addthis="insert into my_table(something) values("$$"+str(row[8])+"$$")
mark.execute(addthis)
conn.commit()

感谢帮助!

4

2 回答 2

6
  1. 您的插入语句应使用占位符。在 psycopg2 的情况下,它是%s.
  2. 您应该将参数作为第二个参数传递给execute(). 这样您就没有引用问题,并且可以防止 SQL 注入攻击。

例如:

addthis = "INSERT INTO my_table (something) VALUES (%s);"
mark.execute(addthis, ('a string you wish to insert',))
于 2012-04-14T05:18:13.697 回答
-3

您可以按照bernie的建议使用占位符。这是首选方式。
但是,在某些情况下,无法使用占位符。然后,您必须手动转义 qoutes。这是通过反斜杠来完成的:

addthis="insert into my_table(something) values(%s)" % str(row[8]).replace('"', r'\"').replace("'", r"\'")
mark.execute(addthis)
于 2012-04-14T12:26:47.553 回答