如何使用python的sqlalchemy的execute()和pymysql在查询中转义%?

时间:2012-06-07 16:23:21

标签: python mysql sqlalchemy

我的查询是:

result = connection.execute(
         "select id_number from Table where string like '_stringStart%' limit 1;")

给出错误:

query = query % escaped_args
TypeError: not enough arguments for format string

一个快速谷歌说使用%%而不是%,但这也不起作用。如何转义%或是否有另一种方法来查询以随机字母开头然后是某个序列的字符串?

3 个答案:

答案 0 :(得分:31)

由于这是一个文字字符串,所以最好在这里使用绑定参数(使用text()说明):

from sqlalchemy import text

connection.execute(
    text("select * from table where "
         "string like :string limit 1"), 
    string="_stringStart%")

答案 1 :(得分:0)

另一种实现绑定参数的方法:

from sqlalchemy import text

connection.execute(
    text("select id_number from Table where string like :string limit 1").\
    bindparams(string="_stringStart%")
)

甚至严格输入:

from sqlalchemy import bindparam, String, text

connection.execute(
    text("select id_number from Table where string like :string limit 1").\
    bindparams(bindparam("string", type_=String)),
    {"string"="_stringStart%"}
)

请记住,text()构造已在SQLAlchemy 1.4中弃用,并将在SQLAlchemy 2.0中删除。

答案 2 :(得分:-2)

根据您的SQL方言,您可以使用反斜杠\

来转义它

我在执行LIKE查询时使用它:

query_wildcard = "%{0}%".format(query.replace("%", "\%"))

对于query100%的搜索,query_wildcard则包含%100\%%,因此实际上会搜索100%

也许这是在你的代码中实现的东西?