Peewee execute_sql 带有转义字符

Peewee execute_sql with escaped characters

我写了一个有一些字符串替换的查询。我正在尝试更新 table 中的 url,但 url 中有 % 符号,导致 tuple index out of range exception

如果我手动打印查询并 运行 它工作正常,但通过 peewee 会导致问题。我怎样才能解决这个问题?我猜这是因为百分号?

query = """
    update table 
      set url = '%s'
     where id = 1
""" % 'www.example.com?colour=Black%26white'
db.execute_sql(query)

您当前共享的代码非常不安全,原因可能与导致您的错误的原因相同。请不要在生产中使用它,否则你会被黑客攻击。

通常:您几乎不想使用 %+.format() 等普通字符串操作来构建 SQL 查询。相反,您应该使用 SQL API/ORM 的特定内置方法为查询提供动态值。对于 SQLite in peewee,它看起来像这样:

query = """
    update table 
      set url = ?
     where id = 1
"""
values = ('www.example.com?colour=Black%26white',)
db.execute_sql(query, values)

数据库引擎会自动处理数据中的任何特殊字符,因此您无需担心。如果您曾经发现自己在数据中遇到特殊字符问题,这是一个非常强烈的警告信号,表明存在某种安全问题。

peewee 文档的 Security and SQL Injection 部分提到了这一点。

你在干什么? Peewee 支持更新。

Table.update(url=new_url).where(Table.id == some_id).execute()