3

Python 2.7 で psycopg2 を使用して、テーブルの行に多くの列を挿入しようとしています。INSERT 構文を短縮する方法はありますか? 現在、プレースホルダー (%s) を VALUES(%s,%s,%s,...%s) のように何度も入力する必要があります。

編集:現在私は持っています

tableCursor.execute('INSERT INTO "table" ("x1","x2","x3","x4")' +
            'VALUES (%s,%s,%s,%s)', (val1,val2,val3,val4))

プレースホルダー以上のものを使用したいのですが、%s を入力し続けるのはちょっと面倒です。

4

2 に答える 2

3

いいえ。

これが問題となる列が十分にある場合は、(a) おそらくスキーマの設計を再考する必要があり、(b) ', '.join(['%s']*n)where nis the number of parameters を使用して文字列を生成できます。

>>> ', '.join(['%s']*7)
'%s, %s, %s, %s, %s, %s, %s'

>>> 'INSERT INTO tablename(col1,col2,col3,col4,col5,col6,col7) VALUES (' + ', '.join(['%s']*7) + ');'
'INSERT INTO tablename(col1,col2,col3,col4,col5,col6,col7) VALUES (%s, %s, %s, %s, %s, %s, %s);'

明示的に指定しなかった場合は、名前が付けられた列の数に基づいてリストがpsycopg自動的に推測されると便利だと思います。VALUESただし、そうではなく、DIY で簡単に作成できます。

于 2012-11-29T05:07:57.487 に答える
1

これも機能します:

tableCursor.execute('INSERT INTO "table" ("x1","x2","x3","x4")' +
            'VALUES %s', [(val1,val2,val3,val4)])

タプルは、引数を再帰的に適合させて括弧に入れることで適合されるため、IN のレコード、複合型、または値のリストを表すのに適しています。

于 2012-11-30T11:00:46.980 に答える