有可能得到必要的查询吗?他花了三天时间试图解决这个问题,向同事征求意见,但毫无帮助
我有一些皮维模型列在下面
class Owner(pw.Model):
id = pw.UUIDField()
name = pw.TextField()
class House(pw.Model):
id = pw.UUIDField()
owner = pw.ForeignKeyField(Owner)
build_end = pw.DateTimeField()
account = pw.ForeignKeyField(AccountData)
class AccountData(pw.Model):
id = pw.UUIDField()
version = pw.IntegerField()
full_access = pw.ManyToManyField(Access)
part_access = pw.ManyToManyField(Access)
class AccountFullAccess(pw.Model):
id = pw.UUIDField()
account = pw.ForeignKeyField(AccountData)
access = pw.ForeignKeyField(Access)
class AccountPartAccess(pw.Model):
id = pw.UUIDField()
account = pw.ForeignKeyField(AccountData)
access = pw.ForeignKeyField(Access)
class Access(pw.Model):
id = pw.UUIDField()
version = pw.ForeignKeyField(AccessVersion)
access_id = pw.IntegerField()
class Cat(pw.Model):
id = pw.UUIDField()
access = pw.ForeignKeyField(Access, unique=True, null=True)
access_v2 = pw.ForeignKeyField(Access, unique=True, null=True)
class AccessVersion(pw.Model):
id = pw.UUIDField()
version = pw.SmallIntegerField(choices=(1, 2))
class OwnerCats(pw.Model):
owner = pw.ForeignKeyField(Owner)
cat = pw.ForeignKeyField(Cat)
我得把许多桌子主人的猫填满。 对于每个业主,我只得到最后建造的一栋房子(House.build\u end)。 每家每户都有一个账户。 每个AccountData都有完全访问和部分访问权限列表。 这些关系存储在AccountFullAccess和AccountPartAccess许多表中。 每个访问都与Cat有关。 有两个版本:第一和第二。版本2的访问权限只能存储在Cat.Access_v2中
我在这一点上停了下来。但我没有足够的价值观。所以,这个查询是错误的
latest_houses = House.select(
House.id
).where(
House.account_id.is_null(False)
).order_by(
House.owner_id,
House.build_end.desc()
).distinct(
House.owner_id
).dicts()
AccessAlias = Access.alias()
account_full_access = Cat.select(
House.id.alias('house_id'),
Cat.id.alias('cat_id'),
House.owner_id.alias('owner_id'),
Access.access_id,
AccessAlias.access_id.alias('access_id_v2'),
).join(
Access,
on=(Cat.access == Access.id)
).switch(
Cat
).join(
AccessAlias,
on=(Cat.access_v2 == AccessAlias.id)
).join(
AccountFullAccess
).join(
AccountData
).join(
House
).where(
(House.account_id.is_null(False))
& (Access.access_id.is_null(False))
& (AccessAlias.access_id.is_null(False))
& (House.id << latest_houses)
).dicts()
我使用相同的查询,但我将AccountFullAccess更改为AccountPartAccess。因此,我需要Access元素,通过AccountFullAccess和AccountPartAccess连接
目前没有回答
相关问题 更多 >
编程相关推荐