我不知道如何使用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。