Код, который вы указали в приведенном выше фрагменте кода, должен работать, но похоже, что вы хотите иметь возможность разрешить модель User
из строки 'User'
.
Нет ничего запеченного в sqlalchemy для достижения этой цели; query
метод требует фактического класса модели.
Однако это не означает, что это невозможно. Моя команда решает подобные проблемы, регистрируя название модели для класса в реестре. Вот очень упрощенная c версия этого. В производственном коде вы, возможно, захотите быть более внимательным, чтобы убедиться, что model_name_registry является одноэлементным экземпляром класса, и что вы не регистрируете дважды имена моделей, и т. Д. c.
model_name_registry = {}
# Create a decorator to automatically register model names to the class
def register_class_name(cls_):
model_name_registry[cls_.__name__] = cls_
def inner(*args, **kwargs):
return cls_(*args, **kwargs)
return inner
# Decorate the classes you want to refer to by string
@register_class_name
class MyModel(Base):
__tablename__ = 'my_table_name'
# . . .
Тогда , вы можете сделать:
model = model_name_registry['User']
model.query(...)