str endswith python sqlalchemy

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