how to insert to a mysql table using mysaldb, where the table name is in a python variable?

帅比萌擦擦* 提交于 2019-12-18 03:43:57

问题


I'm using python-mysql db api to insert some values to a table where the table name is in a python variable. So I wrote the below code

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

As you see the table name is in the hosts_table variable. The problem is mysqldb quotes the table name and i get a mysql error. It works fine when I literally use the table name. How can I get around this?


回答1:


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

Note that the hosts_table variable is a single % sign, and all the other variables are two %% so they are ignored in the initial Python string interpolation, then change to a single % for the mysqldb part.

Try this in the Python prompt to see what I mean:

>>> '%%s %s' % 'x'
'%s x'



回答2:


Try something like that:

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

I'm not sure it will work but it could :)




回答3:


MySQLdb does not care a bit about the names of your variables. If you are having a problem with the table name, try to assign hosts_table to the name of your table, and see if it'll work.

hosts_table = 'hosts_table'

Or just print it out and see what table name it's using:

print hosts_table



来源:https://stackoverflow.com/questions/5936806/how-to-insert-to-a-mysql-table-using-mysaldb-where-the-table-name-is-in-a-pytho

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!