在SQLAlchemy中动态设置要使用ORM进行筛选的列



我不知道如何使用ORM的最新SQLalchemy样式动态设置列进行过滤。

基本上,我想创建一个包装函数,以便能够将任何列传递到语句的"where"部分,其想法是:

def get_id(column, value):
id = session.execute(select(Account.id).where(
Account.column == value)).all()
return id

我的问题是,我无法使用Account[column]动态选择Account对象的属性,因为我收到错误:TypeError:"DeclarativeMeta"对象不可下标

我知道Core可以通过设置表MetaData并使用account.c[column]column()函数来实现这一点,但我对ORM解决方案感兴趣,因为我的表是自动映射的。

谢谢你的帮助。

基本上,您可以使用Python的反射特性,如下所示。

column_name = 'name';
getattr(Account, column_name) # This is equivalent to Account.name

但是您也可以使用像这样的现成API。

ids = [id for id, in session.query(Account.id).filter_by(**{column_name: value}).all()]

请参阅查询API。

最新更新