【问题标题】:Join Queries in Peewee在 Peewee 中加入查询
【发布时间】:2018-04-25 13:59:40
【问题描述】:

你好 Stackoverflow 社区,

我刚刚开始研究 peewee 应用程序,并且很少遇到连接查询。目前,我有以下模型设置:

class Equipment(BaseModel):
    equip_id = CharField(primary_key=True)
    is_fullset = BooleanField(default=False)


class Department(BaseModel):
    dept_id = IntegerField(primary_key=True)
    dept_name = CharField()


class User(BaseModel):
    email = CharField(primary_key=True)
    equip_id_fk = ForeignKeyField(Equipment, related_name="equipments", null=True)
    dept_id_fk = ForeignKeyField(Department, related_name="departments")
    user_name = CharField()

我想显示一个包含所有表的组合信息的视图/表。我尝试为用户和设备这样做(现在):

  query = (Equipment.select(Equipment, User).join(User, JOIN.LEFT_OUTER))

这里我先获取设备值,然后是用户。我尝试用设备更改用户,反之亦然,但效果不佳。 基本上,我想按以下顺序将所有这三个表显示为一个单数表:

User Name || User Email || Dept_ID || Dept_NAME || EQUIP_ID || Is_Fullset

如果我需要更改模型或查询,请告诉我。任何帮助将不胜感激。

【问题讨论】:

    标签: python peewee flask-peewee


    【解决方案1】:
    query = (User
             .select(User, Equipment, Department)
             .join(Equipment, JOIN.INNER)
             .switch(User)
             .join(Department, JOIN.INNER))
    for row in query:
        print(row.user_name, row.email, row.dept_id_fk.dept_id,
              row.dept_id_fk.dept_name, row.equip_id_fk.equip_id,
              row.equip_id_fk.is_fullset)
    

    【讨论】:

    • 非常感谢@coliefer,这很有效。我有一个与之相关的问题。我的一些用户实例的外键为空,我认为上面建议的查询不适用于它。例如,这就是我创建新用户实例的方式将使外键为空:user = User.create( email=request.form['email_id'], user_name=request.form['user_name'], dept_id_fk =request.form['dropdown_depts'], equip_id_fk=None )
    • 其次,当我尝试编辑具有设备 ID 的用户实例之一时,它确实在列表中显示了新的设备 ID,但它不会使用您建议的查询更新 is_fullset(boolean)。 equip_id = request.form['radioID'] Equipment.create( equip_id=equip_id, is_fullset=request.form["radioType"] ) user = User.select().where(User.email == email_id).get() user.equip_id_fk = equip_id user.save() 对此的任何帮助将不胜感激:)
    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多