4

私は python-mysql db api を使用して、テーブル名が python 変数にあるテーブルにいくつかの値を挿入しています。だから私は以下のコードを書いた

DB_CURSOR.execute("""INSERT INTO %s (name,created_by,state,description,docs,admin_email,date_created) VALUES(%s,%s,%s,%s,%s,%s,%s)""", (hosts_table, hostname, created_by, state, description, docroot, admin_email, date_created))

ご覧のとおり、テーブル名は hosts_table 変数にあります。問題は、mysqldb がテーブル名を引用し、mysql エラーが発生することです。文字通りテーブル名を使用するとうまくいきます。どうすればこれを回避できますか?

4

3 に答える 3

6
DB_CURSOR.execute("""INSERT INTO %s 
    (name,created_by,state,description,docs,admin_email,date_created) 
    VALUES(%%s,%%s,%%s,%%s,%%s,%%s,%%s)""" % hosts_table,
    (hostname, created_by, state, description, docroot, admin_email, date_created))

hosts_table 変数は単一の % 記号であり、他のすべての変数は 2 つの %% であるため、最初の Python 文字列補間では無視され、mysqldb 部分の単一の % に変更されることに注意してください。

Pythonプロンプトでこれを試して、私が何を意味するかを確認してください。

>>> '%%s %s' % 'x'
'%s x'
于 2011-05-09T19:45:09.323 に答える
0

MySQLdb は変数の名前を気にしません。テーブル名に問題がある場合は、テーブルhosts_tableの名前に割り当ててみて、うまくいくかどうかを確認してください。

hosts_table = 'hosts_table'

または、printそれを取り出して、使用しているテーブル名を確認します。

print hosts_table

于 2011-05-09T12:53:13.907 に答える
0

そのようなことを試してください:

DB_CURSOR.execute("""INSERT INTO %s (name,created_by,state,description,docs,admin_email,date_created) VALUES(%s,%s,%s,%s,%s,%s,%s)""" % (hosts_table), (hostname, created_by, state, description, docroot, admin_email, date_created))

うまくいくかどうかはわかりませんが、うまくいく可能性があります:)

于 2011-05-09T12:45:14.453 に答える