Peewee 简明教程
Peewee - Query Builder
Peewee 还提供一个非 ORM API 来访问数据库。我们可以将数据库表和列绑定到 Peewee 中定义的 Table 和 Column 对象,而不是定义模型和字段,并使用它们来执行查询。
首先,声明一个与数据库中的表对应的 Table 对象。你必须指定表名和列的列表。还可以选择提供主键。
Contacts=Table('Contacts', ('id', 'RollNo', 'Name', 'City'))
这个表对象通过 bind() 方法与数据库绑定。
Contacts=Contacts.bind(db)
Example
现在,我们可以在这个表对象上使用 select() 方法设置一个 SELECT 查询,并迭代结果集,如下所示:
names=Contacts.select()
for name in names:
print (name)
Output
默认情况下,行以字典的形式返回。
{'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'}
如果需要的话,它们可以作为元组、命名元组或对象获取。
Namedtuples
程序如下:
Output
输出如下 −
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 Table 对象有 update() 方法来实现 SQL UPDATE 查询。要将 Nasik 中所有记录的 City 更改为 Nagar,我们使用以下查询。
Contacts.update(City='Nagar').where((Contacts.City=='Nasik')).execute()
最后,Peewee 中的 Table 类还有 delete() 方法来实现 SQL 中的 DELETE 查询。
Contacts.delete().where(Contacts.Name=='Abdul').execute()