Python 3.4使用MySQLdb将表、列和值作为变量传输

Python 3.4使用MySQLdb将表、列和值作为变量传输,python,python-3.x,mysql-python,Python,Python 3.x,Mysql Python,我正在使用Python 3.4 我有一段代码: import MySQLdb table = "my_table" columns = ("column1", "column2") values = ("value1", "value2") conn = MySQLdb.connect (host = "localhost", user = "user", passwd = "password",

我正在使用Python 3.4

我有一段代码:

import MySQLdb

table = "my_table"
columns = ("column1", "column2")
values = ("value1", "value2")

conn = MySQLdb.connect (host = "localhost",
                       user = "user",
                       passwd = "password",
                       db = "my_database")

cursor = conn.cursor()

# execute an insert
cursor.execute("INSERT INTO my_table column1, column2 VALUES (value1, value2)")

cursor.commit()
cursor.close()
conn.close()
Q:如何将表名、列和值都作为变量传递

我想这样做:

sql = "INSERT INTO %s %s VALUES %s" % (my_table, columns, values)
cursor.execute(sql)

由于execute方法将转义字符串,因此必须将其作为两个步骤来执行

sql = "INSERT INTO {} ({}) VALUES ({})".format(table, ','.join(columns), ','.join('[%s]' * len(columns)))
# Generates: INSERT INTO my_table (column1,column2) VALUES (?,?)
cursor.execute(sql, values)

谢谢,这给了我一些开始。但是,当我运行它时,我得到了这个错误:TypeError:不是所有的参数在字符串格式化期间都被转换。我已经更新了答案,改为使用string.format,您是在创建sql变量时还是在执行时得到了错误?我在执行时得到了错误。sql变量的创建方式与您的注释相同。查看文档,他们似乎使用了%s而不是?。我已更新了答案。我已尝试使用“%s”,但联接将不起作用:它返回%s、%s