【问题标题】:SQLAlchemy get every row the matches query and loop through themSQLAlchemy 获取匹配查询的每一行并遍历它们
【发布时间】:2014-02-24 21:57:14
【问题描述】:

我是 Python 和 SQLAlchemy 的新手。我一直在尝试从数据库中检索内容,并且每次都有效,但是我有点不确定当 select 语句将返回多行时该怎么做。我尝试使用一些在我开始 SQLAlchemy 之前有效的旧代码,但 db 是一个 SQLAlchemy 对象并且没有 execute() 方法。

application = Applications.query.filter_by(brochureID=brochure.id)
cur = db.execute(application)
entries = cur.fetchall()

然后在我的 HTML 文件中

      {% for entry in entries %}
      var getEmail = {{entry.2|tojson|safe}}
      emailArray.push(getEmail);

我查看了 SQLAlchemy 文档,但找不到与获取所有行等效的 .first()。谁能指出我正确的方向?毫无疑问,这是非常小的东西。

【问题讨论】:

    标签: python sqlalchemy flask


    【解决方案1】:

    您的查询是正确的,您只需要更改与结果交互的方式。你要找的方法是all()

    application = Applications.query.filter_by(brochureID=brochure.id)
    entries = application.all()
    

    【讨论】:

    • 从数据库中提取的效果很好,我可以使用dump() 在条目中看到应用程序对象,但是当我将条目传递给我的 HTML 文件时,它说它是未定义的。任何想法为什么会这样?
    • 只是为了澄清(编辑按钮似乎消失了)。我的 HTML 文件中的条目具有正确数量的对象,但每个条目都未定义。我使用的代码与我在上面的 HTML 文件中发布的代码相同
    • 抱歉,我实际上只是对其进行了排序,当我本应使用列名,即 entry.identry.brochureName 时,我正在访问类似 entry.1 的条目属性,谢谢您的帮助!
    • 这将是我的下一个问题。很高兴你成功了。
    【解决方案2】:

    处理 orm 查询的通常方法是通过 Session 类,在某个地方你应该有一个

    engine = sqlalchemy.create_engine("sqlite:///...")
    Session = sqlalchemy.orm.sessionmaker(bind=engine)
    

    我不熟悉烧瓶,但它可能会为您完成一些工作。

    使用Session 工厂,您的应用程序将改为

    session = Session()
    entries = session.query(Application) \
              .filter_by(...) \
              .all()
    

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2021-03-18
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多