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 に答える