endswith - startswith python
Python ''startswith'' equivalente para SqlAlchemy (1)
Tengo una cadena, para la cual necesito encontrar todos los registros con los prefijos correspondientes:
path = ''/abc/123/456''
session.query(Site).filter(path.startswith(Site.path_prefix))
Los siguientes registros coincidirían cuando path_prefix es igual a:
/abc
/ab
/abc/123
Pero no:
/asd
/abc/123/456/789
/kjk
¿Es esto posible con SqlAlchemy, sin cambiar a Python?
Si bindparam()
variable de path
en un objeto bindparam()
, puede tratarlo como cualquier columna, incluido el uso de los .contains()
y .startswith()
:
from sqlalchemy.sql.expression import bindparam
session.query(Site).filter(bindparam(''path'', path).contains(Site.path_prefix))
SQLAlchemy traduce .contains()
a:
? LIKE CONCAT(''%'', Site.path_prefix, ''%'')
en MySQL o
? LIKE ''%'' || Site.path_prefix || ''%''
en otras bases de datos.
Si desea probar una operación .startswith()
, eso también funciona:
from sqlalchemy.sql.expression import bindparam
session.query(Site).filter(bindparam(''path'', path).startswith(Site.path_prefix))