gpt4 book ai didi

Python/SQLite3 在 WHERE 子句中转义

转载 作者:太空狗 更新时间:2023-10-30 03:02:03 26 4
gpt4 key购买 nike

我应该如何在 Python 中为 SQLite3 进行真正的转义?

如果我用谷歌搜索(或搜索 stackoverflow),就会有很多问题,每次回复都是这样的:

dbcursor.execute("SELECT * FROM `foo` WHERE `bar` like ?", ["foobar"])

这有助于防止 SQL 注入(inject),如果我只用“=”进行比较就足够了,但它当然不会分割通配符。

如果我这样做

cursor.execute(u"UPDATE `cookies` set `count`=? WHERE `nickname` ilike ?", (cookies, name))

某些用户可以提供“%”作为昵称,并将所有 cookie 条目替换为一行。我可以自己过滤它(呃......我可能会忘记那些鲜为人知的通配符之一),我可以在昵称和昵称上使用小写并将“ilike”替换为“=”,但我真正想做的是类似的东西:

foo = sqlescape(nick)+"%"
cursor.execute(u"UPDATE `cookies` set `count`=? WHERE `nickname` ilike ?", (cookies, foo))

最佳答案

? 参数旨在避免 SQL 字符串(以及其他有问题的数据类型,如 float 和 blob)的格式问题。

LIKE/GLOB 通配符在不同层面上起作用;它们始终是字符串本身的一部分。SQL 允许对它们进行转义,但没有默认的转义字符;你必须选择一些 ESCAPE clause :

escaped_foo = my_like_escape(foo, "\\")
c.execute("UPDATE cookies SET count = ? WHERE nickname LIKE ? ESCAPE '\',
(cookies, escaped_foo))

(并且您必须为 %_ (LIKE) 或 * 编写自己的 my_like_escape 函数和 ? (GLOB)。)

关于Python/SQLite3 在 WHERE 子句中转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com