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 变量是单个 % 符号,所有其他变量都是两个 %%,因此它们在初始 Python 字符串插值中被忽略,然后更改为 mysqldb 部分的单个 %。

在 Python 提示符下试试这个,看看我的意思:

>>> '%%s %s' % 'x'
'%s x'
于 2011-05-09T19:45:09.323 回答
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 回答
0

MySQLdb 并不关心变量的名称。如果您对表名有疑问,请尝试分配hosts_table给您的表名,看看它是否可以工作。

hosts_table = 'hosts_table'

或者直接print拿出来看看它使用的是什么表名:

print hosts_table

于 2011-05-09T12:53:13.907 回答