如何使用mysaldb在python变量中插入到mysql表?
我正在使用python-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错误。当我直接使用表名时,一切都正常。我该怎么解决这个问题呢?
3 个回答
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
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))
>>> '%%s %s' % 'x'
'%s x'
注意,hosts_table 这个变量用的是一个 % 符号,而其他的变量都是两个 %% 符号,所以在最开始的 Python 字符串插入中,两个 %% 会被忽略,然后在 mysqldb 部分会变成一个 %。
你可以在 Python 提示符下试试看我说的意思: