Python SQL DB字符串文字和转义

时间:2010-11-15 23:15:17

标签: python sql mysql string literals

任何人都知道MySQLdb是否会自动转义SQL语句的字符串文字?

例如,我正在尝试执行以下操作:

cursor.execute("""SELECT * FROM `accounts` WHERE `account_name` = 'Blah'""")

这会自动转义帐户名吗?或者只有我做以下事情才能逃脱?:

x = 'Blah'
cursor.execute("""SELECT * FROM `accounts` WHERE `account_name` = %s""", (x))

或者它会为两者做到吗?任何人都可以澄清这一点,因为我找不到任何相关信息。

2 个答案:

答案 0 :(得分:2)

在第一个示例中没有转义,它是原始SQL查询。它是有效的,它会起作用,但显然只有你总是想要搜索帐户Blah才有意义。

当您需要从变量中的名称获取帐户时,您将需要参数化版本。但是,您的示例可能无法正常工作,因为(x) 不是元组,它只是值x。元组序列中的x(x,)。为避免混淆,您可能更喜欢使用列表[x]

答案 1 :(得分:1)

仅在将查询和数据分别提供给MySQLdb时才进行转义。这就是它如何知道要逃脱的方式。 : - )

因此,只有你的第二个例子才会逃脱:

x = ('Blah',)
cursor.execute("""SELECT * FROM `accounts` WHERE `account_name` = %s""", x)

请注意我如何将x更改为元组。这就是MySQLdb所期望的。它有点意义,因为您可能需要传入多个变量。像:

x = ('Blah','Foo23')
cursor.execute("""SELECT * FROM `accounts` WHERE `account_name` = %s OR `account_code` = %s""", x)

如果这回答了你的问题,请告诉我。

祝你好运。 : - )