Peewee jointure 不是 return 所有选定的字段
Peewee jointure not return all selected fields
我在使用 peewee 库时遇到了一些问题。我在 python 应用程序后面使用 sqlite 数据库并结合 peewee 来访问数据库,在我的一个函数中,我根据函数的输入参数检索数据,它看起来像这样:
def display_characters(self, menu_update: PageView123, emoji: Emoji = None):
# Characters retrieving
query = Character.select(Character, fn.Count(Character.id).alias('count'), CharactersOwnership.discord_user_id)
museum_filter = menu_update.retrieve_hidden_data()
if museum_filter.category is not None:
query = query.where(Character.category == museum_filter.category)
if museum_filter.rarity is not None:
query = query.where(Character.rarity == museum_filter.rarity)
if museum_filter.affiliation is not None:
query = (query.join(CharacterAffiliation)
.join(Affiliation)
.where(Affiliation.name == museum_filter.affiliation))
total_characters = query.count()
# Then we filter on only the owned card
query = (query.join(CharactersOwnership, on=(CharactersOwnership.character_id == Character.id))
.where(CharactersOwnership.discord_user_id == museum_filter.owner.id)
.group_by(Character.id)
.order_by(Character.name))
total_owned = query.count()
代码本身没什么好说的,但问题是当我到达最后一步时,当我们进入条件if museum_filter.affiliation is not None:
时检索到的模型并不完整。
为了描述我的问题,它看起来像这样:
知道查询产生的模型为什么不完整吗?
谢谢!
您可能希望明确调用 .join_from()
指定源和目标 table,因为 peewee 的“连接上下文”可能会伤害您而不是帮助您。文档在这里:http://docs.peewee-orm.com/en/latest/peewee/relationships.html#joining-multiple-tables
或者,在附属块结束时调用 .switch(Character)
将连接上下文重置为字符。此外,您需要明确 select()
所有要检索的列。加入额外的 table 并不意味着从中选择数据
我在使用 peewee 库时遇到了一些问题。我在 python 应用程序后面使用 sqlite 数据库并结合 peewee 来访问数据库,在我的一个函数中,我根据函数的输入参数检索数据,它看起来像这样:
def display_characters(self, menu_update: PageView123, emoji: Emoji = None):
# Characters retrieving
query = Character.select(Character, fn.Count(Character.id).alias('count'), CharactersOwnership.discord_user_id)
museum_filter = menu_update.retrieve_hidden_data()
if museum_filter.category is not None:
query = query.where(Character.category == museum_filter.category)
if museum_filter.rarity is not None:
query = query.where(Character.rarity == museum_filter.rarity)
if museum_filter.affiliation is not None:
query = (query.join(CharacterAffiliation)
.join(Affiliation)
.where(Affiliation.name == museum_filter.affiliation))
total_characters = query.count()
# Then we filter on only the owned card
query = (query.join(CharactersOwnership, on=(CharactersOwnership.character_id == Character.id))
.where(CharactersOwnership.discord_user_id == museum_filter.owner.id)
.group_by(Character.id)
.order_by(Character.name))
total_owned = query.count()
代码本身没什么好说的,但问题是当我到达最后一步时,当我们进入条件if museum_filter.affiliation is not None:
时检索到的模型并不完整。
为了描述我的问题,它看起来像这样:
知道查询产生的模型为什么不完整吗?
谢谢!
您可能希望明确调用 .join_from()
指定源和目标 table,因为 peewee 的“连接上下文”可能会伤害您而不是帮助您。文档在这里:http://docs.peewee-orm.com/en/latest/peewee/relationships.html#joining-multiple-tables
或者,在附属块结束时调用 .switch(Character)
将连接上下文重置为字符。此外,您需要明确 select()
所有要检索的列。加入额外的 table 并不意味着从中选择数据