【问题标题】:Inserting DB name into Sqlite3 command将数据库名称插入 Sqlite3 命令
【发布时间】:2013-07-15 15:05:50
【问题描述】:

我正在使用 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

【问题讨论】:

  • 至少,你应该用%r而不是%s,否则如果表名包含特殊字符,你会遇到问题。

标签: python sql python-2.7 sqlite


【解决方案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 查询。

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 2021-06-12
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多