MSSQL 有两个运算符 'contains' 和 'like',它们的行为不同:
包含通常更快: https://www.mytecbits.com/microsoft/sql-server/like-vs-contains
我有一个使用“Like”的 SQLAlchemy 查询:
if 'FullName' in data:
filters.append(People.FullName.like('%' + data['FullName'] + '%'))
如果我将查询更改为使用“包含”:
if 'FullName' in data:
filters.append(People.FullName.contains(data['FullName']))
echo 返回几乎相同的东西,都使用 like,但实际上都没有使用“contains”:
FROM [People]
WHERE [People].[FullName] LIKE ?
ORDER BY [People].[Id] DESC
OFFSET ? ROWS
FETCH FIRST ? ROWS ONLY
2022-06-08 15:51:23,247 INFO sqlalchemy.engine.Engine [generated in 0.00312s] ('%Bob%', 0, 100)
FROM [People]
WHERE ([People].[FullName] LIKE '%' + ? + '%')
ORDER BY [People].[Id] DESC
OFFSET ? ROWS
FETCH FIRST ? ROWS ONLY
2022-06-08 15:49:40,280 INFO sqlalchemy.engine.Engine [generated in 0.00228s] ('Bob'), 0, 100)
SQLAlchemy 文档引用 Contains,它生成一个表达式
column LIKE '%' || <other> || '%'
。 我似乎没有找到 SQLAlchemy 使用“包含”的示例。
有谁知道如何让 SQLAlchemy 使用“包含”以便我使用全文索引? 我希望查询看起来像这样:
FROM [People]
WHERE CONTAINS([People].[FullName], ?)
ORDER BY [People].[Id] DESC
OFFSET ? ROWS
FETCH FIRST ? ROWS ONLY
2022-06-08 15:49:40,280 INFO sqlalchemy.engine.Engine [generated in 0.00228s] ('Bob'), 0, 100)
或者是将查询编写为 SQL 的唯一解决方案?
非常感谢:-)
所有方法
like()
、contains()
、startswith()
和 endswith()
的功能都相同。根据以下 SQLAlchemy 官方文档,上述任何方法在使用时都会使用 LIKE
运算符在内部创建一个表达式,然后对其进行求值以获得结果。
所以,如果你的查询需要在性能方面更好,最好使用SQL查询。但是使用 SQLAlchemy 的
contains()
方法将得到与在 SQL 中使用 LIKE
运算符相同的输出。
嘿,伙计,你找到解决方案了吗?