大佬教程收集整理的这篇文章主要介绍了Sqlalchemy杂交种,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
遇到sqlalchemy想将average_Vote_value @attribute翻译成sql并且失败的问题我发现@R_650_10675@用hybrids:
但是,我无法弄清楚在这种情况下如何做到这一点.有人可以帮忙吗?
class Thing(db.Model): id = db.column(db.Integer,priMary_key=TruE) name = db.column(db.String(80)) Votes = db.relationship('Vote',BACkref='thing',lazy='dynamic') @hybrid_property def average_Vote_value(self): '''average of Vote.values''' values = [v.value for v in self.Votes] try: return sum(scores) / len(values) except ZeroDivisionError: return 50 # the default value average_Vote_value.expression def average_Vote_value(cls): pass ### Help ### class Vote(db.Model): id = db.column(db.Integer,priMary_key=TruE) thing_id = db.column(db.Integer,db.ForeignKey('thing.id')) value = db.column(db.Float,default=50.0)
from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.ext.declarative import declarative_base Base= declarative_base() class Thing(BasE): __tablename__ = 'thing' id = column(Integer,priMary_key=TruE) name = column(String(80)) Votes = relationship('Vote',lazy='dynamic') @hybrid_property def average_Vote_value(self): '''average of Vote.values''' values = [v.value for v in self.Votes] try: return sum(values) / len(values) except ZeroDivisionError: return 50 # the default value @average_Vote_value.expression def average_Vote_value(cls): return func.coalesce(func.avg(Vote.value),50) class Vote(BasE): __tablename__ = 'Vote' id = column(Integer,priMary_key=TruE) thing_id = column(Integer,ForeignKey('thing.id')) value = column(Float,default=50.0) e = create_ENGIne("POSTGResql://scott:tiger@localhost/test",echo=TruE) Base.Metadata.drop_all(E) Base.Metadata.create_all(E) s = Session(E) s.add_all([ Thing(name="thing1",Votes=[ Vote(value=5),Vote(value=7),Vote(value=8),Vote(value=12),Vote(value=2),Vote(value=15),Vote(value=10),]),Thing(name="thing2",Votes=[ Vote(value=18),Vote(value=16),Vote(value=27),Vote(value=6),Thing(name="thing3",Votes=[]) ] ) s.commit() print s.query(Thing.name,Thing.average_Vote_value).\ outerjoin(Thing.Votes).\ group_by(Thing.Name).all()
输出(减去回声):
[(u'thing3',50.0),(u'thing1',8.22222222222222),(u'thing2',15.4)]
以上是大佬教程为你收集整理的Sqlalchemy杂交种全部内容,希望文章能够帮你解决Sqlalchemy杂交种所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。