我的查询是:
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
一个快速谷歌说使用%%而不是%,但这也不起作用。如何转义%或是否有另一种方法来查询以随机字母开头然后是某个序列的字符串?
答案 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("%", "\%"))
对于query
为100%
的搜索,query_wildcard
则包含%100\%%
,因此实际上会搜索100%
也许这是在你的代码中实现的东西?