6

我有以下代码要插入到我的 postgresql 数据库中

conn = psycopg2.connect("my connection setting are in here")
cur = conn.cursor()
cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%i, \"%s\", \"%s\", \"%s\")' % (1441, "concert", item['title'], item['artists'] )) 

但是,当我运行它时,我收到以下错误:

psycopg2.ProgrammingError: column "concert" does not exist
LINE 1: ...(location_id, catname, title, name) VALUES (1441, concert, "...

但是“音乐会”不是一个列,它是一个值,所以我不明白为什么我会收到这个错误。

编辑 - 我试过把 \" 放在价值音乐会周围,但没有试过

如何在不出现此错误的情况下插入我的数据?

4

1 回答 1

13

你真的,真的不应该使用 python 字符串格式化来构建查询——它们很容易出现SQL 注入。而您的实际问题是您使用 " 进行引用,而您必须使用 ' 进行引用(" 引用表/列名称等,' 引用字符串)。

请改用以下代码:

cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%s, %s, %s, %s)', (1441, 'concert', item['title'], item['artists']))

请注意,%s无论您实际拥有什么类型,都必须使用。

另请参阅http://initd.org/psycopg/docs/usage.html#query-parameters

于 2010-11-06T16:14:38.637 回答