从Python插入到MySQL中的行

时间:2013-07-17 01:33:03

标签: python mysql

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

1 个答案:

答案 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'