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()
我写了一个有一些字符串替换的查询。我正在尝试更新 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()