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))