有人知道 MySQLdb 是否会自动转义 SQL 语句的字符串文字吗?
例如,我正在尝试执行以下操作:
cursor.execute("""SELECT * FROM `accounts` WHERE `account_name` = 'Blah'""")
这会自动转义帐户名称吗?或者只有当我执行以下操作时它才会逃脱?:
x = 'Blah'
cursor.execute("""SELECT * FROM `accounts` WHERE `account_name` = %s""", (x))
或者它会对两者都起作用吗?谁能澄清一下,因为我找不到任何相关信息。
最佳答案
第一个示例中没有转义,它是一个原始 SQL 查询。它是有效的,它会起作用,但显然只有当你总是想搜索帐户 Blah
时它才有意义。
当您需要从变量中的名称获取帐户时,您将需要参数化版本。但是,您的示例可能无法按预期工作,因为 (x)
不是元组,它只是值 x
。元组序列中的 x
将为 (x,)
。为了避免混淆,您可能更喜欢使用列表[x]
。
关于Python SQL DB 字符串文字和转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189808/