如何使用mysaldb在python变量中插入到mysql表?

4 投票
3 回答
1902 浏览
提问于 2025-04-16 17:16

我正在使用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 提示符下试试看我说的意思:

撰写回答