dig*_*ice 2 python sqlite variables sql-delete
遇到问题,将不胜感激任何帮助。
我想删除一行,该行从变量转移到我的 func。那是代码:
con = sql.connect('db.sqlite')
cur = con.cursor()
query = 'delete from media_tmp where media_id="%s"' % media_id.strip()
print(query)
cur.execute(query)
if con:
con.close()
Run Code Online (Sandbox Code Playgroud)
打印(查询)给了我以下内容:
delete from media_tmp where media_id="737589711821419460_184456611"
Run Code Online (Sandbox Code Playgroud)
当我直接在 sqlite 中执行它时,它可以完美运行并删除应得的行。但由 cur.execute(query) 执行根本不起作用。
func 完成得很好,我没有错误。
您可能忘记提交更改:
con.commit()
Run Code Online (Sandbox Code Playgroud)
sqlite3 命令行工具会自动提交更改,而sqlite3
库不会。
您应该真正使用 SQL 参数而不是字符串插值:
query = 'delete from media_tmp where media_id=?'
cur.execute(query, (media_id.strip(),))
Run Code Online (Sandbox Code Playgroud)
引用sqlite3
文档:
通常,您的 SQL 操作需要使用 Python 变量中的值。你不应该使用 Python 的字符串操作来组合你的查询,因为这样做是不安全的;它使您的程序容易受到 SQL 注入攻击(有关可能出错的幽默示例,请参见http://xkcd.com/327/)。
相反,使用 DB-API 的参数替换。
?
在任何要使用值的地方作为占位符放置,然后提供一个值元组作为游标execute()
方法的第二个参数。(其他数据库模块可能使用不同的占位符,例如%s
或:1
。)
归档时间: |
|
查看次数: |
3278 次 |
最近记录: |