使用Postgres在Python中用单引号形成一个insert语句

时间:2012-04-14 05:03:06

标签: python postgresql psycopg2 postgresql-8.4

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

我正在构建一个Python脚本来执行从表到表的复制。 我的插入查询因遇到单引号而遇到“抱歉!我们无法处理您的订单”等注释字段时失败。

我尝试过使用$ quotes但是徒劳无功

这是我正在尝试的

#!/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()

感谢帮助!

2 个答案:

答案 0 :(得分:6)

  1. 您的insert语句应使用占位符。在psycopg2的情况下,它是%s
  2. 您应该将参数作为第二个参数传递给execute()。这样你就没有引用问题而且防范SQL注入攻击。
  3. 例如:

    addthis = "INSERT INTO my_table (something) VALUES (%s);"
    mark.execute(addthis, ('a string you wish to insert',))
    

答案 1 :(得分:-3)

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

addthis="insert into my_table(something) values(%s)" % str(row[8]).replace('"', r'\"').replace("'", r"\'")
mark.execute(addthis)