我正在使用Flask-
SQLAlchemy,并且试图在父模型中编写一种混合方法,该方法返回其具有的子代数,因此可以将其用于过滤,排序等。这是一些精简的代码我正在努力:
# parent.py
from program.extensions import db
from sqlalchemy.ext.hybrid import hybrid_method
class Parent(db.Model):
__tablename__ = 'parents'
parent_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
children = db.relationship('Child', backref='parent', lazy='dynamic')
def __init__(self, name):
self.name = name
@hybrid_method
def child_count(self):
return self.children.count()
@child_count.expression
def child_count(cls):
return ?????
# child.py
from program.extensions import db
from program.models import Parent
class Child(db.Model):
__tablename__ = 'children'
child_id = db.Column(db.Integer, primary_key=True)
parent_id = db.Column(db.Integer, db.ForeignKey(Parent.parent_id))
name = db.Column(db.String(80))
time = db.Column(db.DateTime)
def __init__(self, name, time):
self.name = name
self.time = time
我在这里遇到两个问题。首先,我不知道“ child_count(cls)”到底要返回什么,它必须是一个SQL表达式…我认为应该像
return select([func.count('*'), from_obj=Child).where(Child.parent_id==cls.parent_id).label('Child count')
但我不确定。我遇到的另一个问题是,我无法从parent.py导入Child类,因此无论如何我都无法使用该代码。有什么办法可以使用字符串吗?例如,
select([func.count('*'), from_obj='children').where('children.parent_id==parents.parent_id').label('Child count')
最终,我想将方法更改为:
def child_count(cls, start_time, end_time):
# return the number of children whose "date" parameter is between start_time and end_time
…但是现在,我只是想让它开始工作。非常感谢任何可以帮助我解决这个问题的人,因为我已经尝试了很长时间了。
以下代码显示了所有内容。
class Parent(Base):
__tablename__ = 'parents'
# ...
@hybrid_property
def child_count(self):
#return len(self.children) # @note: use when non-dynamic relationship
return self.children.count()# @note: use when dynamic relationship
@child_count.expression
def child_count(cls):
return (select([func.count(Child.child_id)]).
where(Child.parent_id == cls.parent_id).
label("child_count")
)
@hybrid_method
def child_count_ex(self, stime, etime):
return len([_child for _child in self.children
if stime <= _child.time <= etime ])
@child_count_ex.expression
def child_count_ex(cls, stime, etime):
return (select([func.count(Child.child_id)]).
where(Child.parent_id == cls.parent_id).
where(Child.time >= stime).
where(Child.time <= etime).
label("child_count")
)
# usage of expressions:
stime, etime = datetime.datetime(2012, 1, 1), datetime.datetime(2012, 1, 31)
qry = session.query(Parent)
#qry = qry.filter(Parent.child_count > 2)
qry = qry.filter(Parent.child_count_ex(stime, etime) > 0)
本文向大家介绍BAT与HTML混合编程写法,包括了BAT与HTML混合编程写法的使用技巧和注意事项,需要的朋友参考一下 核心代码
本文向大家介绍.NET Core3.1编写混合C++程序,包括了.NET Core3.1编写混合C++程序的使用技巧和注意事项,需要的朋友参考一下 前言 随着 .NET Core 3.1 的第二个预览版本发布,微软正式将 C++/CLI 移植到 .NET Core 上,从此可以使用 C++ 编写 .NET Core 的程序了。 由于目前仅有 MSVC 支持编译此类混合代码,并且由于涉及到非托管代码
在这个msdn页面上,我读到: 应用程序不能为特定请求混合同步和异步方法。如果调用BeginGetRequestStream方法,则必须使用BeginGetResponse方法检索响应。 反之亦然吗?如果调用异步读取响应,是否还应该使用编写请求? 我的请求很小(100-1000个字符),响应可以很大。Jeffrey Richter的这篇文章似乎是说,在小负载的情况下,它可以同步完成(并且不需要设置
混入 混入和函数定义方法一致,但是应用却大相径庭。 例如,下面有定义的border-radius(n)方法,其却作为一个mixin(如,作为状态调用,而非表达式)调用。 当border-radius()选择器中调用时候,属性会被扩展并复制在选择器中。 border-radius(n) -webkit-border-radius n -moz-border-radius n bor
最近在工作中出现了一个关于Sets的讨论,Sets在Scala中支持方法,以及这可能导致bug的原因,例如。 我认为很明显,不应该支持操作,因为元素没有排序。但是,有人提出问题是实际上不是一个函子,不应该有方法。当然,在一个集合上映射可能会给自己带来麻烦。现在切换到Haskell, 现在在ghci中 因此不能满足函子定律 “替代似乎比必要的更强,基本上是对类型进行商数化,对使用类型的每个函数都提出
我正在玩ruby混合的一些基础知识,由于某种原因无法从我的模块访问行为。 在Ruby Fiddle上运行它: 这会不断返回 我从tutorialspoint对mixin应该如何工作的理解让我觉得我应该能够有效地调用e.meow ,并返回与调用猫相同的结果。喵 。 这是RubyFiddle中的代码。 难以置信的基本,但你知道我在哪里跌倒吗?