【问题标题】:Flask SQLAlchemy query filter with ".all()" does NOT return all rows带有“.all()”的 Flask SQLAlchemy 查询过滤器不会返回所有行
【发布时间】:2016-12-28 19:34:58
【问题描述】:

我正在尝试返回特定 user_id 的所有行。 当我在下面运行查询#1 和#2 时,它只返回它找到的第一行,即使我指定了.all()

当我使用.with_entities 作为案例#3 时,所有行都按预期返回。

我希望能有第二双眼睛。谢谢你。

如果重要的话,我正在使用 MySQLDB(5.5.47 版本)、Flask 0.10.1 和 SQL-Alchemy 2.1。

  1. 只返回第一行:

    result = MyUserClass.query.filter_by(user_id=self.user_id).all() 
    
  2. 这也只返回第一行:

    result = MyUserClass.query.filter(MyUserClass.user_id == self.user_id).all()
    
  3. 按预期工作并返回所有行:

    MyUserClass.query.filter_by(user_id=self.user_id).with_entities(MyUserClass.myColumn).all()
    

【问题讨论】:

  • user_id 是否标记为主列?
  • 嗨,没有 user_id 不是主键。一定要吗?
  • 我正在尝试找出这种行为的原因。如果它被标记为主键或对其具有唯一性约束,则可能表明存在问题。
  • 你能添加MyUserClass的完整定义吗?
  • 啊哈!我发现了问题。马丁,你是对的! user_id 在类定义中设置为主键,但在 MySQLDB 表定义中没有。

标签: python-3.x flask sqlalchemy flask-sqlalchemy


【解决方案1】:

used_id 列被标记为类定义中的主键列(但不是在 MySQLDB 中),正如 Martijn Pieters 指出的那样。添加一个新列并使其成为主键解决了这个问题。

【讨论】:

  • 你应该将你的解决方案作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 2020-10-20
相关资源
最近更新 更多