如何使用mysaldb插入mysql表,其中表名是python变量?

时间:2011-05-09 12:22:22

标签: python mysql-python

我正在使用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错误。当我真正使用表名时,它工作正常。我怎么能绕过这个?

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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))

我不确定它会起作用,但它可以:)

答案 2 :(得分:0)

MySQLdb并不关心变量的名称。如果您对表名有疑问,请尝试将hosts_table指定给您的表名,然后查看它是否有效。

hosts_table = 'hosts_table'

或者只是print它,看看它正在使用的是哪个表名:

print hosts_table