您需要创建一个literal() https://docs.sqlalchemy.org/core/sqlelement.html#sqlalchemy.sql.expression.literal or a bindparam() https://docs.sqlalchemy.org/core/sqlelement.html#sqlalchemy.sql.expression.bindparam:
from sqlalchemy.sql import expression
expression.literal('string').op('~')(column)
# or
expression.bindparam('text', 'string').op('~')(column)
A literal()
基本上是一个bindparam()
有一个隐含的名字;在上面的例子中'text'
是 SQL 语句中使用的参数的名称(键),并且'string'
您希望显示在运算符左侧的文本。
A bindparam()
给你更多的控制权,包括传递一个calleble而不是具体的值:
def value_function():
return some_calculation_result()
expression.bindparam('calculated_value', callable_=value_function).op('~')(column)
SQLAlchemy 会调用value_function()
将语句发送到数据库服务器时。你也可以使用bindparam()
如果你有一个sequence值,SQLAlchemy 将负责调整表达式以应用于序列中的每个值:
strings = ['string1', 'string2', ...]
expression.bindparam('one_or_more', strings).op('~')(column)
# executes `('string1' ~ column OR 'string2' ~ column OR ...)`