python psycopg2 插入 PostgreSQL 求助

6 投票
1 回答
11052 浏览
提问于 2025-04-16 06:40

我有以下代码,用来往我的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, "...

但是“concert”并不是一个列名,它是一个值,所以我不明白为什么会出现这个错误。

补充一下 - 我试着在“concert”这个值周围加上\",也试过不加。

我该怎么做才能插入数据而不出现这个错误呢?

1 个回答

14

你真的不应该用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

撰写回答