1

我在 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()
4

1 回答 1

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'
于 2013-07-17T02:01:09.217 回答