Python 无法使用';删除SQLite行;其中';和变量

Python 无法使用';删除SQLite行;其中';和变量,python,sqlite,variables,sql-delete,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() 打印(查询)给了我以下信息: delete from me

如果遇到问题,请提供帮助

我想删除一行,该行是从变量传输到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()
打印(查询)给了我以下信息:

delete from media_tmp where media_id="737589711821419460_184456611"
当我直接在sqlite中执行该命令时,它可以完美地工作并删除该行。 但是由cur.execute(query)执行根本不起作用


func完成得很好,没有错误。

您可能忘记提交更改:

con.commit()
sqlite3命令行工具自动提交更改,
sqlite3
库不提交更改

您应该真正使用SQL参数而不是字符串插值:

query = 'delete from media_tmp where media_id=?'
cur.execute(query, (media_id.strip(),))
引述:

通常,SQL操作需要使用Python变量中的值。您不应该使用Python的字符串操作来组装查询,因为这样做是不安全的;它使您的程序容易受到SQL注入攻击(有关可能出错的幽默示例,请参阅)

相反,使用DB-API的参数替换。将
作为占位符放置在要使用值的任何位置,然后提供一个值元组作为游标的
execute()
方法的第二个参数。(其他数据库模块可能使用不同的占位符,例如
%s
:1


对不起,我没提到。没有错误,完美无缺。非常感谢!这很有帮助。