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操作时 可以隔离数据库之间的差异 方便于维护
安装
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使用描述相关推荐
- 浅谈script标签中的async和defer
script标签用于加载脚本与执行脚本,在前端开发中可以说是非常重要的标签了. 直接使用script脚本的话,html会按照顺序来加载并执行脚本,在脚本加载&执行的过程中,会阻塞后续的DOM渲 ...
- tornado + peewee 下打印执行 SQL 日志
tornado + peewee 下打印执行 SQL 日志 文章目录 tornado + peewee 下打印执行 SQL 日志 起步 环境准备 打印 peewee 的 SQL 日志 第一个为什么 第 ...
- 2021 牛客网笔试总结 01
文章目录 牛客网笔试 关于TCP/IP网络接口层的描述是错误的 TCP与UDP说法错误的 async await描述错误的 不属于Location对象的属性 BFC js错误类型 flex布局 fle ...
- springboot异步和切面_SpringBoot强化篇(八)-- Spring AOP
Spring AOP简介 AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善.它以通过预编译方式和运 ...
- JAVA_SpringBoot中涉及的注解
SpringBoot注解 动吧 new 对象是一个耗时的过程, spring 是一个资源整合框架. @SpringBootApplication 由此注解(@SpringBootApplication ...
- python取模运算_python取模操作
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文最先发布在:https:www.itcoder.techpostspytho ...
- 旭锋科技制造信息管理系统--客户端主页面
客户端主页面 客户端home页面 (一)业务功能 (二)前端页面构建 2.1 html实现 2.2 CSS实现 2.3 Js实现 (三)左侧菜单栏的动态构建实现 3.1 业务流程 3.2 业务实现 3 ...
- ssmpro-note
ssmpro 笔记2 2104-ssmpro 学习的内容目录 > spirngboot vue node.js 京淘 nginx redis mycat # ssmpro2104本阶段学到的*动 ...
- Tornado 实践:基于 Peewee、Marshmallow、Aioredis 实现用户登录注册接口
1.首先看下需要的目录结构 auth_demo/ ├── apps │ ├── __init__.py │ └── public │ ├── handler.py │ ├── __init__.py ...
- 使用async/await——Nodejs+ExpressJs+Babel
在使用诸如restify/expressjs等Nodejs Web Framework时,我们最头疼的问题就是回调黑洞. 虽然后又Koa/Koa2号称"The Next Framework& ...
最新文章
- java英文字符编码_Java邮件编码非英文字符
- 配置ssh_config
- @ConfigurationProperties注解的使用与@Value的使用
- android使组件居中,Android图文居中显示控件使用方法详解
- 带你全面了解QinQ
- 高等数学下-赵立军-北京大学出版社-题解-练习11.2
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.11
- matlab画迟滞迥线,[画图的问题]怎么画类似于磁滞回线的图像?一个x值对应两个y值的...
- c语言程序设计歌手大奖赛,《C语言及程序设计》实践参考——歌手大奖赛计分函数版...
- 硬件设计论坛_从全球EDA产业发展看EDA365电子论坛作用
- 极通ewebs3.2企业版介绍
- Win10系统隐藏文件资源管理器中的3D对象等七个文件夹
- Linux下安装各种常用软件
- 震撼您心灵的四川雪山
- 合肥学院ACM集训队第一届暑假友谊赛 B	FYZ的求婚之旅 D	计算机科学家 F	智慧码	 题解...
- python控制ppt翻页_详解Python操作PPT的各种骚操作!
- 山峰和山谷 Ridges and Valleys(bfs)
- Ubuntu / Windows 查看域名系统 (Domain Name System,DNS)
- Lenet5实现及代码详解——以MINST数据集为例
- 深圳40年灯光秀之LED显示屏显示技术