将DB名称插入Sqlite3命令

时间:2013-07-15 15:05:50

标签: python sql python-2.7 sqlite

我正在使用python 2.7.3和Sqlite3在一个小数据库中保存一些数据。我有以下sql命令:

thedb = "allpeople"
cursor.execute("INSERT INTO %s VALUES (?,?,?,?,?,?,?,?,?,?,?,?)" % (thedb, data))
conn.commit()

但它抛出以下错误:

TypeError: not all arguments converted during string formatting

1 个答案:

答案 0 :(得分:1)

您正在尝试插入名称(而不是数据库)。您似乎将其与SQL参数混合在一起;字符串模板化和为查询提供SQL参数是两个完全独立的操作。

您必须使用字符串格式单独来构建查询字符串:

cursor.execute("INSERT INTO %s VALUES (?,?,?,?,?,?,?,?,?,?,?,?)" % thedb, data)

或者可能更清楚地说明发生了什么:

query = "INSERT INTO %s VALUES (?,?,?,?,?,?,?,?,?,?,?,?)" % thedb
cursor.execute(query, data)

请注意,这会打开一个可能的SQL注入向量。也许你应该考虑一个体面的SQL库; SQLAlchemy允许您从Python调用(以及其他任务)中构建SQL查询。