peewee是一个轻量级的ORM框架,适用于小型项目
要使用首先的现在安装peewee模块:
C:\Users\asus>pip3 install peewee
Collecting peewee
Downloadinghttps://files.pythonhosted.org/packages/33/07/d4c742d88998fb448e18be41dc25e748376b7f69359d37fedaee09e66617/peewee-3.5.2.tar.gz 1.9MB)100% |████████████████████████████████| 1.9MB 13kB/s
Installing collected packages: peewee
Running setup.py install for peewee ... done Successfully installed peewee-3.5.2
安装完成之后,要使用peewee操作数据库得先import
连接数据库并创建table
from peewee import MySQLDatabase, Model, CharField, DateField, BooleanField, IntegerField
#py_peewee连接的数据库名
db = MySQLDatabase('py_peewee', host='192.168.1.103', user='root', passwd='mysql', charset='utf8', port=3306)
class BaseModel(Model):
class Meta:
database = db #将实体与数据库进行绑定
class Person(BaseModel): #继承自BaseModel,直接关联db,并且也继承了Model。Model有提供增删查改的函数
name = CharField(verbose_name='姓名', max_length=10, null=False, index=True)
passwd = CharField(verbose_name='密码', max_length=20, null=False, default='111111')
gender = IntegerField(verbose_name='姓别', null=False, default=1)
is_admin = BooleanField(verbose_name='是否是管理员', default=False)
#查询数据库是连接
print(db.is_closed()) #返回false未连接
#连接数据库
db.connect()
print(db.is_closed()) #返回true表示已连接
#创建table
Person.create_table()
CharFiled,IntegerField,BooleanField......都是数据库中得数据类型,可以通过查看源码看到相应得解释:
class CharField(_StringField):
field_type = 'VARCHAR'
def __init__(self, max_length=255, *args, **kwargs):
self.max_length = max_length
super(CharField, self).__init__(*args, **kwargs)
def get_modifiers(self):
return self.max_length and [self.max_length] or None
上面的代码来源于peewee模块。
1.新增数据
from com.dtjy.peewee.learn_peewee import *
#创建一条数据
p = Person.create(name='ab',email='123@321')
create()函数传入的参数数量可变的,使用dictionary类型接受,键就是数据库中column
2.修改数据
from com.dtjy.peewee.learn_peewee import *
p = Person.get(name='ab',email='123@321')
p.passwd = '999999'
#将修改后的数据进行存库
p.save()
修改某条数据的先获取到该数据,使用get()函数,然后赋值给引用变量进行修改,save()函数保存,这种方式只能修改一条数据,且是第一条满足条件的数据,后面满足条件的数据都不会被修改,应为通过print(type(p))输出<Model: Person>可知查询返回的是一个Person对象
3.查找数据
单个查找:和修改数据中的方法相同:p=Person.select().where(Person.name=='ab').get(),另一种写法
多个查询结果:
ps = Person.select() 通过只使用select函数可获取所有数据,且返回的是个<class 'peewee.ModelSelect'>
通过使用tuple函数可操作该结果,元素是Person对象:
ps = Person.select()
print(type(ps))
print(ps[1])
print(type(ps[1]))
for i in ps:
print(i.name)
from com.dtjy.peewee.learn_peewee import
ps=Person.select().where(Person.name=='ab').order_by(Person.id)
print(type(ps))
for p in ps:
print(p.name)
也可以使用filter()函数:
ps = Person.filter(name='ab')
for p in ps:
print(p.name)
以上的查询方式适用于比较简单条件的sql查询,如果查询语句十分复杂,且是多表关联就不是很灵活了
4.删除数据
删除一条:
p = Person.get(name='ab')
p.delete_instance()
删除多条:
Person.delete().where(Person.name=='ab').execute()