Python ‘comienza con’ equivalente para SqlAlchemy

Tengo una cadena para la que necesito encontrar todos los registros con prefijos coincidentes:

path = '/abc/123/456' session.query(Site).filter(path.startswith(Site.path_prefix)) 

Los siguientes registros coincidirían cuando path_prefix sea igual a:

 /abc /ab /abc/123 

Pero no:

 /asd /abc/123/456/789 /kjk 

¿Es esto posible con SqlAlchemy, sin cambiar a python?

Si envuelve la variable de path en un objeto bindparam() , puede tratarla como cualquier columna, incluyendo 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() su lugar, eso también funciona:

 from sqlalchemy.sql.expression import bindparam session.query(Site).filter(bindparam('path', path).startswith(Site.path_prefix))