python – 带有SQLAlchemy的动态column_property
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 带有SQLAlchemy的动态column_property,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1573字,纯文字阅读大概需要3分钟。
内容图文
![python – 带有SQLAlchemy的动态column_property](/upload/InfoBanner/zyjiaocheng/908/3260369c301a4fd1b23458a30f98db3a.jpg)
我有一些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全部内容,希望文章能够帮你解决python – 带有SQLAlchemy的动态column_property所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。