我在Python中创建查询以使用MySQL填充本地数据库中的行。
我的变量product
是一个元组,它包含33个值。我想将所有这些值添加到名为roottable
的表中列出的相应列中(我在dbForge中创建)。我在第con.execute()
行收到错误:
TypeError: not all arguments converted during string formatting
不确定我做错了什么。我使用与SQlite相同的语法。 这是我的代码:
connection = msql.connect(host = 'localhost', user = 'me', passwd = 'password', db = 'TESTDB')
with connection:
for product in list_product:
#Get a tuple of standardized informtaion to store in table
product = normalize_table_entry(product)
con = connection.cursor()
con.execute('INSERT INTO roottable VALUES (?,?,?,?,?,?,?,?,?,\
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', product)
#connection.commit()
答案 0 :(得分:2)
您使用的是MySQLdb
吗?与sqlite3
不同,MySQLdb
使用%s
作为参数标记,而不是?
。那么,在这种情况下,请尝试
sql = 'INSERT INTO roottable VALUES ({})'.format(','.join(['%s']*33))
connection = msql.connect(host = 'localhost', user = 'me',
passwd = 'password', db = 'TESTDB')
sql = 'INSERT INTO roottable VALUES ({})'.format(','.join(['%s']*33))
with connection:
for product in list_product:
#Get a tuple of standardized information to store in table
product = normalize_table_entry(product)
con = connection.cursor()
con.execute(sql, product)
#connection.commit()
通过查看较小的示例,可以最好地理解表达式','.join(['%s']*33)
:
In [25]: ['%s']*3
Out[25]: ['%s', '%s', '%s']
In [26]: ','.join(['%s']*3)
Out[26]: '%s,%s,%s'