I created a parser using pyparser that takes a filter string similar to what you'd pass to Query.filter(), and returns an object you can pass to Query.filter(). ex. "Child.last_name == 'Smith' AND Child.first_name LIKE 'J%' OR Child.parent_id IS NULL". This was to allow storing the query string in the database as text and avoid using eval() or similar.
It's nowhere near complete operator-wise but it does grab the classes from Base, sounds similar to what you're trying to do? https://gist.github.com/djlambert/dc909c4405df12c8a824121b2d4d713b On Thursday, March 15, 2018 at 1:04:46 PM UTC-5, Josh wrote: > > Currently, SQLA lets us use constructs like `child = > relationship('Child')`, where 'Child' is Python code that is evaluated > against some global-ish namespace. (More advanced: "Child.id == Parent.id", > etc) > > Is this something that is available as a public library? We'd like to use > a similar pattern in our own mixin - we have a list of models that a model > can link to, and we'd like to be able to say `linked_models = ['ModelA', > 'ModelB']` and have that later be able to return the actual classes. (The > reason why we have this is a bit long and tedious, but it's basically a > hack to avoid circular imports.) > > In other words, is there a function that can do `model_cls = > looup_model(model_name)`? > > Thanks, > Josh > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.