Peewee - 子查询


在 SQL 中,子查询是另一个查询的 WHERE 子句中的嵌入查询。我们可以将子查询实现为model.select()作为外部 model.select() 语句的 where 属性内的参数。

为了演示 Peewee 中子查询的使用,让我们使用定义的以下模型 -

from peewee import *
db = SqliteDatabase('mydatabase.db')

class BaseModel(Model):
   class Meta:
      database = db

class Contacts(BaseModel):
   RollNo = IntegerField()
   Name = TextField()
   City = TextField()

class Branches(BaseModel):
   RollNo = IntegerField()
   Faculty = TextField()

db.create_tables([Contacts, Branches])

创建表后,将使用以下示例数据填充它们 -

联系人表

联系人表如下 -

数据表 数据表1

为了仅显示为 ETC 教员注册的 RollNo 的联系人表中的姓名和城市,以下代码生成一个 SELECT 查询,并在其 WHERE 子句中包含另一个 SELECT 查询。

#this query is used as subquery
faculty=Branches.select(Branches.RollNo).where(Branches.Faculty=="ETC")
names=Contacts.select().where (Contacts.RollNo .in_(faculty))

print ("RollNo and City for Faculty='ETC'")
for name in names:
   print ("RollNo:{} City:{}".format(name.RollNo, name.City))

db.close()

上面的代码将显示以下结果:

RollNo and City for Faculty='ETC'
RollNo:103 City:Indore
RollNo:104 City:Nasik
RollNo:108 City:Delhi
RollNo:110 City:Nasik