- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 sqlalchemy(实际上是 Flask-sqlalchemy,因此是所有的 db.*),我希望能够通过他们相关的“投票”的平均投票值对我的“事物”进行排序。投票的值为 0 到 100。
遇到了 sqlalchemy 想要将 average_vote_value @attribute 转换为 sql 并且失败的问题,我发现我可能应该使用 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)
最佳答案
归根结底,您需要考虑如何以 SQL 查询的形式获得您想要的结果。您不能仅从“混合、python、属性”等方面来考虑它。虽然我们将使用这些技术来获得结果,但正是 SQL 的工作方式引导我们到达那里。所以让我们使用 Postgresql,它内置了 AVG 函数,大多数数据库都有。我们需要从 Thing JOIN 到 Vote,并且由于您要考虑 Thing 没有 Votes 的情况,因此需要 LEFT OUTER JOIN。混合表达式只是你想要的 SQL 表达式的句法助手,但最终你仍然需要拼出 SQL 需要的 JOIN:
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', 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(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=7),
Vote(value=8),
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),
Vote(value=10),
]),
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 混合体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10861409/
我有一个 sqlalchemy(实际上是 Flask-sqlalchemy,因此是所有的 db.*),我希望能够通过他们相关的“投票”的平均投票值对我的“事物”进行排序。投票的值为 0 到 100。
在 cmd 中,可以使用带有 ubuntu 的 linux 命令。或 bash命令,但它们非常善变。在批处理中,也可以制作一个 vbs-batch 混合体,这让我想到,是否可以制作一个 bash-ba
我正在开发用于数据分析的混合 SQL(使用 mySQL)和 HDF5 数据库解决方案。我的一些数据非常适合关系型数据,SQL 作为一种查询语言非常方便和有效,但是我有大量的数值数据(包含数千个元素/行
我们开始混入一些 es6 模块,当您在不使用 sourceType: 脚本的情况下使用 import/export 时,eslint 会公正地提示 Parsing error: 'import' an
我们在这里讨论 oo-functional 混合体,但我想知道,实际上有多少语言符合这个名称。 Scala、Clojure、F#?还有吗? 每个答案都有一种这样的语言会很棒,并解释一下为什么您认为它是
是否有一个数据库可以让您享受参照完整性和使用 SQL 类型语言进行查询的好处,还可以让实体根据其数据属性以及它们之间的关系进行松散定义? 例如采用 RBAC 类型模型,您可以在其中拥有权限、用户、用户
虽然有一些技术可以让您创建 perfect (而不是 perfect )批处理文件与一些“本地”Windows 脚本语言混合。 “完美”的混合体应该是什么样子: 嵌入的代码必须是可用的,你应该有能力将
我从 MVC 3 开始,并计划将模型和 Controller 分离到它们自己的独立项目中。为此,我将遵循这篇文章中的建议: asp.net mvc put controllers into a sep
我是一名优秀的程序员,十分优秀!