SqlAlchemy 2.0 中文文档(二十七)(2)https://developer.aliyun.com/article/1560498
参数:
other
– 要比较的表达式。这通常是一个简单的字符串值,但也可以是任意的 SQL 表达式。默认情况下,LIKE 通配符字符%
和_
不会被转义,除非将ColumnOperators.contains.autoescape
标志设置为 True。autoescape
–
布尔值;当为 True 时,在 LIKE 表达式中建立一个转义字符,然后将其应用于比较值中所有的"%"
、"_"
和转义字符本身的出现,假定比较值是一个字面字符串而不是 SQL 表达式。
例如:
somecolumn.contains("foo%bar", autoescape=True)
- 将呈现为:
somecolumn LIKE '%' || :param || '%' ESCAPE '/'
- 使用值
:param
为"foo/%bar"
。 escape
–
一个字符,当给定时,将使用ESCAPE
关键字将该字符建立为转义字符。然后可以将该字符放在%
和_
的出现之前,以允许它们作为自身而不是通配符字符。
例如:
somecolumn.contains("foo/%bar", escape="^")
- 将呈现为:
somecolumn LIKE '%' || :param || '%' ESCAPE '^'
- 该参数也可以与
ColumnOperators.contains.autoescape
结合使用:
somecolumn.contains("foo%bar^bat", escape="^", autoescape=True)
- 在上述情况下,给定的字面参数将在传递到数据库之前转换为
"foo^%bar^^bat"
。
另请参阅
ColumnOperators.startswith()
ColumnOperators.endswith()
ColumnOperators.like()
method desc() → ColumnOperators
继承自 ColumnOperators.desc()
方法的 ColumnOperators
生成一个针对父对象的desc()
子句。
method distinct() → ColumnOperators
继承自 ColumnOperators.distinct()
方法的 ColumnOperators
生成一个针对父对象的distinct()
子句。
method endswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators
继承自 ColumnOperators.endswith()
方法的 ColumnOperators
实现‘endswith’运算符。
生成一个 LIKE 表达式,用于测试字符串值的末尾匹配:
column LIKE '%' || <other>
例如:
stmt = select(sometable).\ where(sometable.c.column.endswith("foobar"))
由于该运算符使用LIKE
,在表达式中存在的通配符字符"%"
和"_"
也会像通配符一样起作用。 对于字面字符串值,可以将ColumnOperators.endswith.autoescape
标志设置为True
,以对字符串值中这些字符的出现进行转义,使它们匹配为它们自身而不是通配符字符。 或者,ColumnOperators.endswith.escape
参数将建立一个给定字符作为转义字符,当目标表达式不是字面字符串时,这可能会有用。
参数:
other
– 要比较的表达式。 这通常是一个简单的字符串值,但也可以是任意 SQL 表达式。 除非将ColumnOperators.endswith.autoescape
标志设置为 True,否则不会默认转义 LIKE 通配符%
和_
。autoescape
–
布尔值;当为 True 时,在 LIKE 表达式中建立一个转义字符,然后将其应用于比较值中所有的"%"
、"_"
和转义字符本身的出现,假定比较值是一个文字字符串而不是一个 SQL 表达式。
诸如:
somecolumn.endswith("foo%bar", autoescape=True)
- 将呈现为:
somecolumn LIKE '%' || :param ESCAPE '/'
- 值为
:param
的值为"foo/%bar"
。 escape
–
一个字符,给定时将使用ESCAPE
关键字将其渲染为转义字符。然后,可以在%
和_
的出现之前放置此字符,以允许它们作为自己而不是通配符字符。
诸如:
somecolumn.endswith("foo/%bar", escape="^")
- 将呈现为:
somecolumn LIKE '%' || :param ESCAPE '^'
- 参数也可以与
ColumnOperators.endswith.autoescape
结合使用:
somecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
- 在上面的例子中,给定的文字参数在传递给数据库之前将被转换为
"foo^%bar^^bat"
。
请参阅
ColumnOperators.startswith()
ColumnOperators.contains()
ColumnOperators.like()
method has(criterion: _ColumnExpressionArgument[bool] | None = None, **kwargs: Any) → ColumnElement[bool]
返回一个 SQL 表达式,如果此元素引用满足给定条件的成员,则表示为 true。
has()
的通常实现是Comparator.has()
。
参数:
criterion
– 针对成员类表或属性制定的可选 ClauseElement。**kwargs
– 键/值对,对应于将通过等式与相应值进行比较的成员类属性名称。
method icontains(other: Any, **kw: Any) → ColumnOperators
继承自 ColumnOperators.icontains()
的 ColumnOperators
实现icontains
运算符,例如ColumnOperators.contains()
的不区分大小写版本。
生成一个 LIKE 表达式,测试对字符串值中间的大小写不敏感匹配:
lower(column) LIKE '%' || lower(<other>) || '%'
例如:
stmt = select(sometable).\ where(sometable.c.column.icontains("foobar"))
由于操作符使用了 LIKE
,所以存在于 表达式中的通配符字符 "%"
和 "_"
也将像通配符一样行为。对于文字字符串值,可以将 ColumnOperators.icontains.autoescape
标志设置为 True
,以对字符串值中这些字符的出现进行转义,使它们匹配为它们自身而不是通配符字符。或者,ColumnOperators.icontains.escape
参数将建立一个给定的字符作为转义字符,当目标表达式不是文字字符串时可能会有用。
参数:
other
- 要进行比较的表达式。通常这是一个普通的字符串值,但也可以是任意的 SQL 表达式。LIKE 通配符字符%
和_
默认情况下不被转义,除非ColumnOperators.icontains.autoescape
标志被设置为 True。autoescape
-
布尔值;当为 True 时,在 LIKE 表达式中建立一个转义字符,然后将其应用于比较值中所有出现的"%"
、"_"
和转义字符本身,假定比较值是一个文字字符串而不是 SQL 表达式。
一个如下的表达式:
somecolumn.icontains("foo%bar", autoescape=True)
- 将被渲染为:
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '/'
- 其中参数的值为
:param
,为"foo/%bar"
。 escape
-
一个字符,当给定时将使用ESCAPE
关键字来建立该字符作为转义字符。然后,可以将该字符放在%
和_
的前面,以允许它们作为自身而不是通配符字符。
一个如下的表达式:
somecolumn.icontains("foo/%bar", escape="^")
- 将被渲染为:
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '^'
- 此参数也可以与
ColumnOperators.contains.autoescape
结合使用:
somecolumn.icontains("foo%bar^bat", escape="^", autoescape=True)
- 在上述情况下,给定的文字参数在传递到数据库之前将被转换为
"foo^%bar^^bat"
。
另见
ColumnOperators.contains()
method iendswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators
继承自 ColumnOperators.iendswith()
方法的 ColumnOperators
实现iendswith
操作符,例如ColumnOperators.endswith()
的不区分大小写版本。
生成一个 LIKE 表达式,用于对字符串值的不区分大小写匹配进行测试:
lower(column) LIKE '%' || lower(<other>)
例如:
stmt = select(sometable).\ where(sometable.c.column.iendswith("foobar"))
由于该操作符使用LIKE
,在表达式内部存在的通配符字符"%"
和"_"
也将像通配符一样起作用。对于字面字符串值,可以将ColumnOperators.iendswith.autoescape
标志设置为True
,以对字符串值中这些字符的出现进行转义,使它们匹配为它们自己而不是通配符字符。或者,ColumnOperators.iendswith.escape
参数将确定一个给定字符作为转义字符,当目标表达式不是字面字符串时可能会有用。
参数:
other
– 要比较的表达式。通常是一个普通字符串值,但也可以是任意 SQL 表达式。LIKE 通配符字符%
和_
默认情况下不会被转义,除非设置了ColumnOperators.iendswith.autoescape
标志为 True。autoescape
–
布尔值;当为 True 时,在 LIKE 表达式中建立一个转义字符,然后将其应用于比较值中所有出现的"%"
、"_"
和转义字符本身,假定比较值是一个字面字符串而不是 SQL 表达式。
例如表达式:
somecolumn.iendswith("foo%bar", autoescape=True)
- 将呈现为:
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '/'
- 其中
param
的值为"foo/%bar"
。 escape
–
一个字符,当给定时,将使用ESCAPE
关键字来确定该字符作为转义字符。然后可以将该字符放在%
和_
之前,以使它们可以作为它们自己而不是通配符字符。
例如表达式:
somecolumn.iendswith("foo/%bar", escape="^")
- 将呈现为:
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '^'
- 参数也可以与
ColumnOperators.iendswith.autoescape
结合使用:
somecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
- 在上述情况下,给定的文字参数将在传递到数据库之前转换为
"foo^%bar^^bat"
。
另请参阅
ColumnOperators.endswith()
method ilike(other: Any, escape: str | None = None) → ColumnOperators
继承自 ColumnOperators.ilike()
方法的 ColumnOperators
实现 ilike
运算符,例如,大小写不敏感的 LIKE。
在列上下文中,生成形式为:
lower(a) LIKE lower(other)
或在支持 ILIKE 运算符的后端上:
a ILIKE other
例如:
stmt = select(sometable).\ where(sometable.c.column.ilike("%foobar%"))
参数:
other
– 要比较的表达式escape
–
可选的转义字符,渲染ESCAPE
关键字,例如:
somecolumn.ilike("foo/%bar", escape="/")
另请参阅
ColumnOperators.like()
method in_(other: Any) → ColumnOperators
继承自 ColumnOperators.in_()
方法的 ColumnOperators
实现 in
运算符。
在列上下文中,生成子句 column IN
。
给定的参数 other
可能是:
- 一个字面值列表,例如:
stmt.where(column.in_([1, 2, 3]))
- 在此调用形式中,项目列表被转换为与给定列表相同长度的一组绑定参数:
WHERE COL IN (?, ?, ?)
- 如果比较的对象是包含多个表达式的
tuple_()
,可以提供一个元组列表:
from sqlalchemy import tuple_ stmt.where(tuple_(col1, col2).in_([(1, 10), (2, 20), (3, 30)]))
- 一个空列表,例如:
stmt.where(column.in_([]))
- 在此调用形式中,表达式呈现一个“空集”表达式。这些表达式针对各个后端进行了定制,通常试图得到一个空的 SELECT 语句作为子查询。例如在 SQLite 上,该表达式是:
WHERE col IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
- 版本 1.4 中更改:在所有情况下,空的 IN 表达式现在使用执行时生成的 SELECT 子查询。
- 可以使用绑定参数,例如
bindparam()
,如果它包含bindparam.expanding
标志:
stmt.where(column.in_(bindparam('value', expanding=True)))
- 在此调用形式中,表达式呈现一个特殊的非 SQL 占位符表达式,看起来像:
WHERE COL IN ([EXPANDING_value])
- 这个占位符表达式在语句执行时拦截,被转换成前面所示的可变数量的绑定参数形式。如果语句执行为:
connection.execute(stmt, {"value": [1, 2, 3]})
- 数据库将为每个值传递一个绑定参数:
WHERE COL IN (?, ?, ?)
- 版本 1.2 中新增:“expanding” 绑定参数
如果传递了一个空列表,则渲染一个特殊的“空列表”表达式,该表达式特定于正在使用的数据库。在 SQLite 上,这将是:
WHERE COL IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
- 版本 1.3 中新增:“expanding” 绑定参数现在支持空列表
- 一个
select()
构造,通常是一个相关的标量选择:
stmt.where( column.in_( select(othertable.c.y). where(table.c.x == othertable.c.x) ) )
- 在此调用形式中,
ColumnOperators.in_()
呈现如下:
WHERE COL IN (SELECT othertable.y FROM othertable WHERE othertable.x = table.x)
参数:
other – 一个字面量列表,一个select()
构造,或者一个包含设置为 True 的bindparam()
构造,其中包括bindparam.expanding
标志。
method is_(other: Any) → ColumnOperators
继承自 ColumnOperators.is_()
方法的 ColumnOperators
实现IS
运算符。
通常,当与None
的值进行比较时���会自动生成IS
,这会解析为NULL
。但是,在某些平台上,如果与布尔值进行比较,则可能希望显式使用IS
。
另请参见
ColumnOperators.is_not()
method is_distinct_from(other: Any) → ColumnOperators
继承自 ColumnOperators.is_distinct_from()
方法的 ColumnOperators
实现IS DISTINCT FROM
运算符。
在大多数平台上呈现“a IS DISTINCT FROM b”;在某些平台上,如 SQLite,可能呈现“a IS NOT b”。
method is_not(other: Any) → ColumnOperators
继承自 ColumnOperators.is_not()
方法的 ColumnOperators
实现IS NOT
运算符。
通常,当与None
的值进行比较时,会自动生成IS NOT
,这会解析为NULL
。但是,在某些平台上,如果与布尔值进行比较,则可能希望显式使用IS NOT
。
从版本 1.4 开始更改:is_not()
运算符从先前版本的isnot()
重命名。以前的名称仍可用于向后兼容。
另请参见
ColumnOperators.is_()
method is_not_distinct_from(other: Any) → ColumnOperators
从 ColumnOperators.is_not_distinct_from()
方法继承
实现 IS NOT DISTINCT FROM
运算符。
在大多数平台上渲染为 “a IS NOT DISTINCT FROM b”;在一些平台上,比如 SQLite,可能会渲染为 “a IS b”。
在 1.4 版本中更改:is_not_distinct_from()
运算符在之前的版本中从 isnot_distinct_from()
重命名。 以前的名称仍然可用于向后兼容。
method isnot(other: Any) → ColumnOperators
从 ColumnOperators.isnot()
方法继承
实现 IS NOT
运算符。
通常,当与 None
的值进行比较时,会自动生成 IS NOT
,它解析为 NULL
。 然而,在某些平台上,如果要与布尔值进行比较,则可能希望显式使用 IS NOT
。
在 1.4 版本中更改:is_not()
运算符在之前的版本中从 isnot()
重命名。 以前的名称仍然可用于向后兼容。
另请参阅
ColumnOperators.is_()
method isnot_distinct_from(other: Any) → ColumnOperators
从 ColumnOperators.isnot_distinct_from()
方法继承
实现 IS NOT DISTINCT FROM
运算符。
在大多数平台上渲染为 “a IS NOT DISTINCT FROM b”;在一些平台上,比如 SQLite,可能会渲染为 “a IS b”。
在 1.4 版本中更改:is_not_distinct_from()
运算符在之前的版本中从 isnot_distinct_from()
重命名。 以前的名称仍然可用于向后兼容。
method istartswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators
从 ColumnOperators.istartswith()
方法继承
实现 istartswith
运算符,例如,ColumnOperators.startswith()
的不区分大小写版本。
产生一个 LIKE 表达式,用于对字符串值的开头进行不区分大小写的匹配:
lower(column) LIKE lower(<other>) || '%'
例如:
stmt = select(sometable).\ where(sometable.c.column.istartswith("foobar"))
由于该操作符使用LIKE
,存在于表达式内部的通配符字符"%"
和"_"
也将像通配符一样起作用。对于字面字符串值,可以将ColumnOperators.istartswith.autoescape
标志设置为 True,以对字符串值内这些字符的出现应用转义,使它们匹配为自身而不是通配符字符。或者,ColumnOperators.istartswith.escape
参数将建立一个给定字符作为转义字符,当目标表达式不是字面字符串时可能会有用。
SqlAlchemy 2.0 中文文档(二十七)(4)https://developer.aliyun.com/article/1560507