2011-05-09 63 views
4

我正在使用python-mysql db api将一些值插入表名在python变量中的表中。所以我写了下面的代码如何使用mysaldb插入到mysql表中,其中表名在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错误。当我真正使用表名时,它工作正常。我怎样才能解决这个问题?

回答

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' 
+1

它的工作非常感谢。 – vimukthi 2011-05-10 03:56:08

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)) 

我不知道它会工作,但它可能:)

0

MySQLdb的不关心一下自己的变量的名称。如果您遇到表名称问题,请尝试将hosts_table分配给表名,并查看它是否可以使用。

hosts_table = 'hosts_table'

或者只是print一下,看看它使用的是什么表名:

print hosts_table

+0

这不是一个变量命名问题。问题是MySQLdb以与处理列名相同的方式处理表名变量。所以它引用它作为字符串列的价值思想。 – vimukthi 2011-05-09 14:11:26

相关问题