python - 将数据库名称插入Sqlite3命令中

标签 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

最佳答案

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

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

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

或者也许更清楚地说明正在发生的事情:

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

请注意,这会让您面临可能的 SQL 注入(inject)向量。也许你应该寻找一个像样的 SQL 库; SQLAlchemy 允许您通过 Python 调用(以及其他任务)构建 SQL 查询。

关于python - 将数据库名称插入Sqlite3命令中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17657478/

相关文章:

python - 我可以对当前正在写入的文件使用 fdpexpect 吗?

python - 删除重复项并找到唯一的子列表

python - 对 Py_Initialize() 的 undefined reference

python - 使用 python : saving objects of the "pooled" functions 进行多处理

python - 如何在 CentOS 上为 python 2.6 安装模块?

c# - Entity Framework 中的参数值超出范围(首先是数据库)

sql - Entity Framework 6 Update from Database 忽略已删除的列,类型更改

mysql - 即将到来的生日年错误 (SQL)

ruby - 删除文件中第二个文件中没有匹配项的行的最快方法是什么?

python-2.7 - Mod 函数在 python 中对于大数失败