path変数をbindparam()オブジェクトでラップすると、 .contains()and.startswith()演算子を使用するなど、任意の列のように扱うことができます。
from sqlalchemy.sql.expression import bindparam
session.query(Site).filter(bindparam('path', path).contains(Site.path_prefix))
SQLAlchemy は次のように変換.contains()されます。
? LIKE CONCAT('%', Site.path_prefix, '%')
MySQL または
? LIKE '%' || Site.path_prefix || '%'
他のデータベースで。
代わりに操作をテストしたい場合は.startswith()、それも機能します。
from sqlalchemy.sql.expression import bindparam
session.query(Site).filter(bindparam('path', path).startswith(Site.path_prefix))