Peewee – 查询生成器
Peewee还提供了一个非ORM的API来访问数据库。我们可以将数据库中的表和列绑定到Peewee中定义的 表和列 对象上,而不是定义模型和字段,并在其帮助下执行查询。
首先,声明一个与我们数据库中的表相对应的表对象。你必须指定表名和列的列表。也可以选择提供一个主键。
Contacts=Table('Contacts', ('id', 'RollNo', 'Name', 'City'))
这个表对象是用 bind() 方法与数据库绑定的。
Contacts=Contacts.bind(db)
例子
现在,我们可以用select()方法在这个表对象上设置一个SELECT查询,并对结果集进行迭代,如下所示
names=Contacts.select()
for name in names:
print (name)
输出
默认情况下,这些行是以字典的形式返回的。
{'id': 1, 'RollNo': 101, 'Name': 'Anil', 'City': 'Mumbai'}
{'id': 2, 'RollNo': 102, 'Name': 'Amar', 'City': 'Delhi'}
{'id': 3, 'RollNo': 103, 'Name': 'Raam', 'City': 'Indore'}
{'id': 4, 'RollNo': 104, 'Name': 'Leena', 'City': 'Nasik'}
{'id': 5, 'RollNo': 105, 'Name': 'Keshav', 'City': 'Pune'}
{'id': 6, 'RollNo': 106, 'Name': 'Hema', 'City': 'Nagpur'}
{'id': 7, 'RollNo': 107, 'Name': 'Beena', 'City': 'Chennai'}
{'id': 8, 'RollNo': 108, 'Name': 'John', 'City': 'Delhi'}
{'id': 9, 'RollNo': 109, 'Name': 'Jaya', 'City': 'Nasik'}
{'id': 10, 'RollNo': 110, 'Name': 'Raja', 'City': 'Nasik'}
如果需要,它们可以作为图元、命名图元或对象获得。
图元
程序如下 –
例子
names=Contacts.select().tuples()
for name in names:
print (name)
输出
输出情况如下
(1, 101, 'Anil', 'Mumbai')
(2, 102, 'Amar', 'Delhi')
(3, 103, 'Raam', 'Indore')
(4, 104, 'Leena', 'Nasik')
(5, 105, 'Keshav', 'Pune')
(6, 106, 'Hema', 'Nagpur')
(7, 107, 'Beena', 'Chennai')
(8, 108, 'John', 'Delhi')
(9, 109, 'Jaya', 'Nasik')
(10, 110, 'Raja', 'Nasik')
命名的图元
该程序说明如下
例子
names=Contacts.select().namedtuples()
for name in names:
print (name)
输出
输出情况如下
Row(id=1, RollNo=101, Name='Anil', City='Mumbai')
Row(id=2, RollNo=102, Name='Amar', City='Delhi')
Row(id=3, RollNo=103, Name='Raam', City='Indore')
Row(id=4, RollNo=104, Name='Leena', City='Nasik')
Row(id=5, RollNo=105, Name='Keshav', City='Pune')
Row(id=6, RollNo=106, Name='Hema', City='Nagpur')
Row(id=7, RollNo=107, Name='Beena', City='Chennai')
Row(id=8, RollNo=108, Name='John', City='Delhi')
Row(id=9, RollNo=109, Name='Jaya', City='Nasik')
Row(id=10, RollNo=110, Name='Raja', City='Nasik')
为了插入一条新的记录,INSERT查询的结构如下
id = Contacts.insert(RollNo=111, Name='Abdul', City='Surat').execute()
如果要添加的记录列表被存储为字典列表或图元列表,它们可以被批量添加。
Records=[{‘RollNo’:112, ‘Name’:’Ajay’, ‘City’:’Mysore’},
{‘RollNo’:113, ‘Name’:’Majid’,’City’:’Delhi’}}
Or
Records=[(112, ‘Ajay’,’Mysore’), (113, ‘Majid’, ‘Delhi’)}
INSERT查询的写法如下
Contacts.insert(Records).execute()
Peewee表对象有 update() 方法来实现SQL UPDATE查询。为了将所有记录的城市从Nasik改为Nagar,我们使用以下查询。
Contacts.update(City='Nagar').where((Contacts.City=='Nasik')).execute()
最后,Peewee的表类也有 delete() 方法来实现SQL中的DELETE查询。
Contacts.delete().where(Contacts.Name=='Abdul').execute()