当前位置:   article > 正文

peewee-async使用描述_peewee_async

peewee_async

1.peewee-async是一个为peewee ORM 提供由asyncio支持的异步io库,在单独使用peewee连接池连接时,同时使用到了async和await协程,这样操作会阻塞整个进程,因为tornado是单进程,必须数据库也使用使用异步,才能不阻塞整个进程,这时候就使用到了peewee-async 2.peewee-async就像是django式的API,使其易用,轻量实现,在我们使用tornado中 可以很容易的连接 3.peewee-async通过MySQLDatabase连接数据库,当连接后可以对数据库进行操作也就是orm操作。使用orm操作时 可以隔离数据库之间的差异 方便于维护

安装

  1. pip install peewee
  2. pip install peewee-async

操作

1.创建连接

在项目目录下新建settings.py

  1. import peewee_async
  2. database = peewee_async.MySQLDatabase("usertest", "127.0.0.1", port=3306, user="root", password="mysql")

2.在创建app时配制

  1. from settings import database
  2. from peewee_async import Manager
  3. def getapp():
  4.   app = tornado.web.Application([
  5.        
  6.   ],**settings)
  7.   # 就在这里添加数据库连接
  8.   objects = Manager(database)    
  9.    
  10.   # 禁止使用同步操作
  11.   database.set_allow_sync(False)    
  12.   app.objects = objects    
  13.   return app  

3.在项目目录下创建models文件夹,用于存放所有的模型类

4.在models下新建base.py

  1. from datetime import datetime
  2. from peewee import Model, DateTimeField
  3. from settings import database
  4. class BaseModel(Model):   
  5.   create_time = DateTimeField(default=datetime.now, verbose_name="创建时间")    
  6.   class Meta:        
  7.       database = database

5.创建项目中需要的表

在models下新建user.py一对多

  1. from peewee import CharField, IntegerField, TextField,ForeignKeyField
  2. from models.base import BaseModel
  3. class Student(BaseModel):    
  4.   name = CharField(max_length=100, null=False, verbose_name="学生名")    
  5.   age = IntegerField(null=False, verbose_name="年龄")    
  6.   desc = TextField(verbose_name="个人简介")
  7.   teacher = ForeignKeyField(Teacher, related_name="students")
  8. class Teacher(BaseModel):    
  9.   name = CharField(max_length=100, null=False, verbose_name="老师名")   
  10.   age = IntegerField(null=False, verbose_name="年龄")   
  11.   subject = CharField(max_length=100, null=False, verbose_name="学科")

6.在项目目录下新建init_db.py

  1. from settings import database
  2. from models.user import *
  3. def init_db():   
  4. database.create_tables([Teacher, Teacher])
  5.   database.create_tables([Student, Student])
  6. if __name__ == '__main__':    
  7.   init_db()

7.添加、查询、修改、删除数据单表

  1. from datetime import datetime
  2. from .base import BaseHandler
  3. from models.user import *
  4. import json
  5. class TeacherHandler(BaseHandler):
  6.   #添加
  7.   async def post(self):
  8.       # data = json.loads(self.request.body)
  9.       teacher = {"name":'zs','age':1,'subject':'234'}
  10.       await self.application.objects.create(Teacher,**teacher)
  11.       self.write({"code":200})
  12.   #修改
  13.   async def put(self):
  14.       t = Teacher(id=1,name='234')
  15.       await self.application.objects.update(t)
  16.       self.write({"code":200})
  17.   #删除
  18.   async def delete(self):
  19.       t = Teacher(id=1)
  20.       await self.application.objects.delete(t)
  21.       self.write({"code":200})
  22.   #查询
  23.   async def get(self):
  24.       #查询单表
  25.       teacher = await self.application.objects.get(Teacher,id=2)
  26.       create_time = datetime.strftime(teacher.create_time,"%Y-%m-%d %H:%m:%s")
  27.       t ={'id':teacher.id,'name':teacher.name,'addtime':create_time}
  28.       self.write({"code":200,'tea':t})

8.一对多查询数据

9.多对多

10.条件查询

  1. # 查询所有
  2.       teacher = await self.application.objects.execute(Teacher.select())
  3.       for i in teacher:
  4.           print(i.id)
  5.       #查询一条,注意使用get时如果没有数据会报错
  6.       teacher = await self.application.objects.get(Teacher,id=2)
  7.       print(teacher.id)
  8.       #条件查询,返回一条数据也是列表(==,>,<),in
  9.       teacher = await self.application.objects.execute(Teacher.select().where(Teacher.id>1).limit(1).offset(0))
  10.       for i in teacher:
  11.           print(i.name)
  12.       # 多个条件查询
  13.       where_query=tuple()
  14.       where_query+=Teacher.id==2,
  15.       where_query+=Teacher.name=='zs',
  16.       teacher = await self.application.objects.execute(Teacher.select().where(*where_query))
  17.       for i in teacher:
  18.           print(i.id)

11.字段初始化参数

1、字段初始化参数
所有字段类型接受的参数及其默认值
​
  1. null = False 允许空值
  2. index = False 创建索引
  3. unique = False 创建唯一索引
  4. column_name = None 显式指定数据库中的列名
  5. default = None 默认值,可以使任意值或可调用对象
  6. primary_key = False 指明主键
  7. constraints = None 约束条件
  8. sequence = None 序列名字(如果数据库支持)
  9. collation = None 排序字段
  10. unindexed = False 虚表上的字段不应该被索引
  11. choices = None 两种可选项:value display
  12. help_text = None 帮助说明字段。表示此字段的任何有用文本的字符串
  13. verbose_name = None 表示此字段的用户友好名称的字符串
  14. index_type = None 索引类型

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号