gpt4 book ai didi

python - 使用 SQLAlchemy 的动态 column_property

转载 作者:太空狗 更新时间:2023-10-30 02:23:13 29 4
gpt4 key购买 nike

我有一些 SA 模型,需要一些技巧:

class Entry(Base):
__tablename__ = 'entry'
id = Column(Integer, primary_key=True)
title = Column(Unicode(255))
author_id = Column(Integer, ForeignKey('user.id'))
date = Column(DateTime)
content = Column(Text)
author = relationship('User', backref='entries')

class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
username = Column(Unicode(255))
...

如你所见,这是非常经典的,用户写条目......我需要提供一些关于他们的统计数据(比如每周/每月显示他们的条目......)

为了统计条目,我向用户模型添加了一个column_property,如下所示:

class User(Base):
...
entries_count = column_property(select([func.count(Entry.id)]).\
where(Entry.author_id==id))

这让我可以显示用户写了多少条目。但是要在给定日期范围内进行一些统计,我需要动态调整 entries_count 以添加日期标准。

所以问题是:您将如何管理日期标准? column_property 是满足这种需求的最佳解决方案吗??

提前致谢。

最佳答案

添加属性是获取与对象相关的一些数据库状态的好方法。但是对于外部标准参数,计数将不仅仅是一个状态,而是一个函数。将此类数据表示为对象属性并不好。所以直接查询附加数据(在下面的所有示例中计算比 start_date 更新的 antries):

session.query(User, func.count(Entry.id))\
.outerjoin((Entry, (Entry.author_id==User.id) & (Entry.date>start_date)))\
.group_by(User.id)

或者在 User 类中定义一个辅助方法(不是属性!)以简化使用:

class User(Base):
# ...
@classmethod
def entries_count(cls, cond):
return select([func.count(Entry.id)])\
.where((Entry.author_id==cls.id) & cond)\
.as_scalar()

session.query(User, User.entries_count(Entry.date>start_date))

关于python - 使用 SQLAlchemy 的动态 column_property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5443529/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com