我有一个字符串,我需要找到所有带有匹配前缀的记录:
path = '/abc/123/456'
session.query(Site).filter(path.startswith(Site.path_prefix))
Run Code Online (Sandbox Code Playgroud)
当path_prefix等于时,以下记录将匹配:
/abc
/ab
/abc/123
Run Code Online (Sandbox Code Playgroud)
但不是:
/asd
/abc/123/456/789
/kjk
Run Code Online (Sandbox Code Playgroud)
这可能与SqlAlchemy,而不切换到python?
Mar*_*ers 11
如果将path变量包装在bindparam()对象中,则可以将其视为任何列,包括使用.contains()和.startswith()运算符:
from sqlalchemy.sql.expression import bindparam
session.query(Site).filter(bindparam('path', path).contains(Site.path_prefix))
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy转换.contains()为:
? LIKE CONCAT('%', Site.path_prefix, '%')
Run Code Online (Sandbox Code Playgroud)
在MySQL或
? LIKE '%' || Site.path_prefix || '%'
Run Code Online (Sandbox Code Playgroud)
在其他数据库上.
如果你想测试一个.startswith()操作,那也是有效的:
from sqlalchemy.sql.expression import bindparam
session.query(Site).filter(bindparam('path', path).startswith(Site.path_prefix))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3834 次 |
| 最近记录: |