peewee-async使用描述

2023-10-26

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)
      #条件查询,返回一条数据也是列表(==,>,<),in
      teacher = 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 索引类型
​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

peewee-async使用描述 的相关文章

  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 【深度学习】全连接层 (Full Connection,FC)

    Introduce 全连接层也是一种卷积层 它的参数基本和卷积层的参数一样 只是它的卷积核大小和原数据大小一致 起到将学到的 分布式特征表示 映射到样本标记空间的作用 用 global average pooling 取代 FC 已经成为了
  • Java开发环境系列:你真的会用eclipse吗?

    第一步 下载Eclipse 并安装 下载链接 http www eclipse org downloads 1 点击 Download Packages 进入Eclipse下载界面 2 找到Eclipse IDE for Java EE D
  • 首创模拟电子计算机,指导日本原子弹投射,这个大佬有点牛

    作者 年素清 责编 王晓曼 出品 程序人生 ID coder life 万尼瓦尔 布什 Vannevar Bush 是美国历史上最伟大的科学家和工程师之一 他在二战时创立美国科学研究局 提出了著名的 曼哈顿计划 并指导了第一颗原子弹试验和日
  • Chapter Four : Python 序列之列表、元组操作详解合集

    目录 一 列表 1 列表基本操作 定义列表 删除列表 访问列表 遍历列表 2 列表常用方法及操作详解 2 1 添加元素 append extend insert 运算符 运算符 2 2 删除元素 del pop remove clear 2
  • flutter系列集合之App项目集成flutter混合开发详细指南大神必学

    消息队列目前流行的有KafKa RabbitMQ ActiveMQ等 它们的诞生无非不是为了解决消息的分布式消费 完成项目 服务之间的解耦动作 消息队列提供者与消费者之间完全采用异步通信方式 极力的提高了系统的响应能力 从而提高系统的网络请
  • 数据挖掘的种种-节课准备

    数据挖掘 Data Mining DM 又称数据库中的知识发现 Knowledge Discover in Database KDD 数据挖掘概述 数据挖掘 Data Mining DM 又称数据库中的知识发现 Knowledge Disc
  • C# InvokeRequired和Invoke

    一 简介 WinForm 关于InvokeRequired与Invoke Jlins的博客 CSDN博客 invokerequired c 是禁止夸线程直接访问控件 InvokeRequired是为了解决这个问题而产生的 当一个控件的Inv
  • cpu与gpu实现矩阵相乘对比

    1 完成矩阵相乘的并行程序的实现 要求 实现2个矩阵 1024 1024 的相乘 数据类型设置为float 1 使用CPU计算 include
  • 开源的一些基础介绍

    国内 淘宝 百度 南航 网易等 国外 新浪 搜狐 facebook ebay google等 成功后的企业也在不断为开源添加新能量 如 taobao和google等 因为他们不但被开源的魅力深深吸引住同时也愿意通过开源提升自我 现在更多的企
  • Wrappers.<实体>lambdaQuery的使用

    文章目录 MP 配置 Service CURD接口 Mapper CURD接口 insert delete update select 条件构造器 LambdaUpdateWrapper Wrappers lt 实体 gt lambdaUp
  • 机器人教育是一种科学的探究方式

    创新是推动经济社会发展的核心驱动力 当前 我国已经深刻认识到世界新科技革命带来的机遇和挑战 以高度的历史责任感 强烈的忧患意识和宽广的世界眼光 把创新作为推动经济社会发展的驱动力量 机器人技术的进步将会对科学与技术的发展产生重要影响 只有开
  • 算法(C)(两数之和)

    题目 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 target 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不
  • JSON使用的一些总结

    http sx666 blogspot com 2007 11 json html JSON JavaScript Object Notation 是一种轻量级的数据交换格式 它采用完全独立于语言的文本格式 可以用来在客户端和服务器端传输数
  • innerText和innerHTML区别

    innerText和innerHTML区别 尽管DOM带来了动态修改文档的能力 但对开发人员来说 这还不够 IE4 0为所有的元素引入了两个特性 以更方便的进行文档操作 这两个特性是innerText和innerHTML 其中innerTe
  • Oracle:重复数据去重,只取其中一条(最新时间/其他字段排序规则)数据

    一 问题 一个会话id代表一个聊天室 返回该聊天室最新的一条数据显示在会话列表 二 解决思路 使用row number over 分组排序功能 来解决该问题 1 语法格式 row number over partition by 分组列 o
  • TMOD、SCON、PCON寄存器的配置

    TMOD控制寄存器 TMOD是定时器 计数器模式控制寄存器 它是一个逐位定义的8为寄存器 但只能使用字节寻址 其各位是 由上图我们就可以看出 这个寄存器控制了两个定时器 计数器 寄存器的高四位控制定时器1 低四位控制定时器0 GATE 门控
  • 数据分析毕业设计 二手房数据爬取与分析可视化系统 -python

    1 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • Air700E开发板

    文章目录 基础资料 概述 主要功能 外设分布 PinOut 管脚定义 管脚功能说明 固件升级 正常开机模式 下载模式 IO 电平选择 基础资料 Air700E文档中心 概述 EVB Air700E 开发板是合宙通信推出的基于 Air700E
  • 去除VsCode代码前面的小点点

    去除VsCode代码前面的小点点 去除图片中的点 步骤 File gt Preferences gt Setting 搜索RenderWhitespace 将Text Editor下的Editor Render Whitespace改为no
  • peewee-async使用描述

    1 peewee async是一个为peewee ORM 提供由asyncio支持的异步io库 在单独使用peewee连接池连接时 同时使用到了async和await协程 这样操作会阻塞整个进程 因为tornado是单进程 必须数据库也使用