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操作时 可以隔离数据库之间的差异 方便于维护

安装

pip install peewee
pip install peewee-async

操作

1.创建连接

在项目目录下新建settings.py

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

2.在创建app时配制

from settings import database
from peewee_async import Manager
​
def getapp():app = tornado.web.Application([],**settings)
​# 就在这里添加数据库连接objects = Manager(database)    # 禁止使用同步操作database.set_allow_sync(False)    app.objects = objects    return app  

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

4.在models下新建base.py

from datetime import datetime
​
from peewee import Model, DateTimeField
​
from settings import database
​
class BaseModel(Model):   create_time = DateTimeField(default=datetime.now, verbose_name="创建时间")    class Meta:        database = database

5.创建项目中需要的表

在models下新建user.py一对多

from peewee import CharField, IntegerField, TextField,ForeignKeyField
from models.base import BaseModel
​
class Student(BaseModel):    name = CharField(max_length=100, null=False, verbose_name="学生名")    age = IntegerField(null=False, verbose_name="年龄")    desc = TextField(verbose_name="个人简介")teacher = ForeignKeyField(Teacher, related_name="students")
​
class Teacher(BaseModel):    name = CharField(max_length=100, null=False, verbose_name="老师名")   age = IntegerField(null=False, verbose_name="年龄")   subject = CharField(max_length=100, null=False, verbose_name="学科")
​

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

from settings import database
​
from models.user import *
​
def init_db():
database.create_tables([Teacher, Teacher])database.create_tables([Student, Student])
if __name__ == '__main__':    init_db()
​

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

from datetime import datetime
from .base import BaseHandler
from models.user import *
import json
class TeacherHandler(BaseHandler):#添加async def post(self):# data = json.loads(self.request.body)teacher = {"name":'zs','age':1,'subject':'234'}await self.application.objects.create(Teacher,**teacher)self.write({"code":200})#修改async def put(self):t = Teacher(id=1,name='234')await self.application.objects.update(t)self.write({"code":200})
​#删除async def delete(self):t = Teacher(id=1)await self.application.objects.delete(t)self.write({"code":200})#查询async def get(self):#查询单表teacher = await self.application.objects.get(Teacher,id=2)create_time = datetime.strftime(teacher.create_time,"%Y-%m-%d %H:%m:%s")t ={'id':teacher.id,'name':teacher.name,'addtime':create_time}self.write({"code":200,'tea':t})
​

8.一对多查询数据

9.多对多

10.条件查询

# 查询所有teacher = await self.application.objects.execute(Teacher.select())for i in teacher:print(i.id)#查询一条,注意使用get时如果没有数据会报错teacher = await self.application.objects.get(Teacher,id=2)print(teacher.id)#条件查询,返回一条数据也是列表(==,>,<),inteacher = await self.application.objects.execute(Teacher.select().where(Teacher.id>1).limit(1).offset(0))for i in teacher:print(i.name)# 多个条件查询where_query=tuple()where_query+=Teacher.id==2,where_query+=Teacher.name=='zs',teacher = await self.application.objects.execute(Teacher.select().where(*where_query))for i in teacher:print(i.id)

11.字段初始化参数

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

peewee-async使用描述相关推荐

  1. 浅谈script标签中的async和defer

    script标签用于加载脚本与执行脚本,在前端开发中可以说是非常重要的标签了. 直接使用script脚本的话,html会按照顺序来加载并执行脚本,在脚本加载&执行的过程中,会阻塞后续的DOM渲 ...

  2. tornado + peewee 下打印执行 SQL 日志

    tornado + peewee 下打印执行 SQL 日志 文章目录 tornado + peewee 下打印执行 SQL 日志 起步 环境准备 打印 peewee 的 SQL 日志 第一个为什么 第 ...

  3. 2021 牛客网笔试总结 01

    文章目录 牛客网笔试 关于TCP/IP网络接口层的描述是错误的 TCP与UDP说法错误的 async await描述错误的 不属于Location对象的属性 BFC js错误类型 flex布局 fle ...

  4. springboot异步和切面_SpringBoot强化篇(八)-- Spring AOP

    Spring AOP简介 AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善.它以通过预编译方式和运 ...

  5. JAVA_SpringBoot中涉及的注解

    SpringBoot注解 动吧 new 对象是一个耗时的过程, spring 是一个资源整合框架. @SpringBootApplication 由此注解(@SpringBootApplication ...

  6. python取模运算_python取模操作

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文最先发布在:https:www.itcoder.techpostspytho ...

  7. 旭锋科技制造信息管理系统--客户端主页面

    客户端主页面 客户端home页面 (一)业务功能 (二)前端页面构建 2.1 html实现 2.2 CSS实现 2.3 Js实现 (三)左侧菜单栏的动态构建实现 3.1 业务流程 3.2 业务实现 3 ...

  8. ssmpro-note

    ssmpro 笔记2 2104-ssmpro 学习的内容目录 > spirngboot vue node.js 京淘 nginx redis mycat # ssmpro2104本阶段学到的*动 ...

  9. Tornado 实践:基于 Peewee、Marshmallow、Aioredis 实现用户登录注册接口

    1.首先看下需要的目录结构 auth_demo/ ├── apps │ ├── __init__.py │ └── public │ ├── handler.py │ ├── __init__.py ...

  10. 使用async/await——Nodejs+ExpressJs+Babel

    在使用诸如restify/expressjs等Nodejs Web Framework时,我们最头疼的问题就是回调黑洞. 虽然后又Koa/Koa2号称"The Next Framework& ...

最新文章

  1. java英文字符编码_Java邮件编码非英文字符
  2. 配置ssh_config
  3. @ConfigurationProperties注解的使用与@Value的使用
  4. android使组件居中,Android图文居中显示控件使用方法详解
  5. 带你全面了解QinQ
  6. 高等数学下-赵立军-北京大学出版社-题解-练习11.2
  7. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.11
  8. matlab画迟滞迥线,[画图的问题]怎么画类似于磁滞回线的图像?一个x值对应两个y值的...
  9. c语言程序设计歌手大奖赛,《C语言及程序设计》实践参考——歌手大奖赛计分函数版...
  10. 硬件设计论坛_从全球EDA产业发展看EDA365电子论坛作用
  11. 极通ewebs3.2企业版介绍
  12. Win10系统隐藏文件资源管理器中的3D对象等七个文件夹
  13. Linux下安装各种常用软件
  14. 震撼您心灵的四川雪山
  15. 合肥学院ACM集训队第一届暑假友谊赛 B FYZ的求婚之旅 D 计算机科学家 F 智慧码 题解...
  16. python控制ppt翻页_详解Python操作PPT的各种骚操作!
  17. 山峰和山谷 Ridges and Valleys(bfs)
  18. Ubuntu / Windows 查看域名系统 (Domain Name System,DNS)
  19. Lenet5实现及代码详解——以MINST数据集为例
  20. 深圳40年灯光秀之LED显示屏显示技术

热门文章

  1. 从牛顿定律到飞行器动力学
  2. ti ds90ub953 与ds90ub954 、ds90ub933的调试总结
  3. 疑似小米汽车全车设计效果图曝光 小米Logo上车
  4. JavaWeb题库整理
  5. 软件工程毕业设计课题(78)微信小程序毕业设计PHP校园食堂就餐预约小程序系统设计与实现
  6. 全志A40I开发板方案定制开发
  7. allegro ARTWORK设置笔记
  8. 如何判断2的n次方?用四种方式来扒一扒。
  9. WinForm中新开一个线程操作窗体上的控件(跨线程操作控件)GOOD
  10. 一款开源免费的办公套件系统:DzzOffice详细部署