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()コンストラクトはSQLAlchemy1.4で非推奨になり、SQLAlchemy2.0で削除されることに注意してください。

于 2020-11-23T15:33:50.703 に答える