python psycopg2 插入 PostgreSQL 求助
我有以下代码,用来往我的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。