26

我的查询是:

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

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

4

2 回答 2

42

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

from sqlalchemy import text

connection.execute(
    text("select * from table where "
         "string like :string limit 1"), 
    string="_stringStart%")
于 2012-06-12T22:14:00.733 回答
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 中删除。

于 2020-11-23T15:33:50.703 回答