gpt4 book ai didi

Python/SQLAlchemy "or"功能

转载 作者:行者123 更新时间:2023-12-01 05:54:45 25 4
gpt4 key购买 nike

我似乎无法找出为什么“或”会这样。我正在使用 SQLAlchemy,WTForms.ext.sqlalchemy.QuerySelectFieldQuerySelectField 可以设置 query_factory,但如果它丢失,它应该回退到字段查询方法:

例如

class Form1(Form):
fielda = QuerySelectField('Field A')

您还可以像这样设置 query_factory 参数:

class Form1(Form):
fielda = QuerySelectField('Field A', query_factory=somefunction)

然后在其他地方使用如下形式:

form = Form1(request.form)
form.fielda.query = MyObjects.query.all()

我看到的是,如果 MyObjects.query.all() 返回一个空列表,我会在该行中收到 NoneType not callable 异常QuerySelectField _get_object_list() 方法:

query = self.query or self.query_factory()

基本上,无论 self.query 的值是什么,or 仍然会调用 self.query_factory(),即使它是分配给

所以,我的问题是,这是 的预期行为吗?看起来它会评估这两个值,然后如果第一个值是“无”,它会决定是否需要使用第二个值。这是正确的吗?

最佳答案

短路。这意味着

query = self.query or self.query_factory()

评估如下:

  1. 检查 self.query 的计算结果是否为 False。如果不是,则 self.query 引用的对象将绑定(bind)到 query。在这种情况下,self.query_factory()不会被调用
  2. 如果它一个Falsey值(包括None),那么self.query_factory()是调用并将其结果绑定(bind)到查询

关于Python/SQLAlchemy "or"功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13088213/

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