python下的sql处理(python中aioysql异步操作MySQL的方法)
python下的sql处理
python中aioysql异步操作MySQL的方法python异步io初探
探索异步io执之前,先说说io的种类
1.阻塞io最简单,即读写数据时,需要等待操作完成,才能继续执行。进阶的做法就是用多线程来处理需要io的部分,缺点是开销会有些大。
2.非阻塞io,即读写数据时,如果暂时不可读写,则立刻返回,而不等待。因为不知道什么时候是可读写的,所以轮询时可能会浪费cpu时间。
3.io复用,即在读写数据前,先检查哪些描述符是可读写的,再去读写。select 和 poll 就是这样做的,它们会遍历所有被监视的描述符,查看是否满足,这个检查的过程是阻塞的。而 epoll、kqueue 和/dev/poll 则做了些改进,事先注册需要检查哪些描述符的哪些事件,当状态发生变化时,内核会调用对应的回调函数,将这些描述符保存下来;下次获取可用的描述符时,直接返回这些发生变化的描述符即可。
4.信号驱动,即描述符就绪时,内核发送sigio信号,再由信号处理程序处理这些信号即可。不过信号处理的时机是从内核态返回用户态时,感觉也得把这些事件收集起来才好处理,有点想模拟io复用了。
5.最后时异步io,即读写数据时,只注册事件,内核完成读写后(读取的数据会复制到用户态),再调用事件处理函数。这整个过程都不会阻塞调用线程。
python 3.4 开始,标准库里又新增了 asyncio 这个模块。
从原理上来说,它和 tornado 其实差不多,都是注册 io 事件,然后在 io loop 中等待事件发生,然后调用相应的处理函数。
aiomysql说明
1. poll
此库提供一个简单的连接对象用法:
|
import asyncio import aiomysql loop = asyncio.get_event_loop() @asyncio .coroutine def go() pool = yield from aiomysql.create_pool(host = '127.0.0.1' , port = 3306 , user = 'root' , password = '', db = 'mysql' , loop = loop) with ( yield from pool) as conn: cur = yield from conn.cursor() yield from cur.execute( "select 10" ) # print(cur.description) (r,) = yield from cur.fetchone() assert r = = 10 pool.close() yield from pool.wait_closed() loop.run_until_complete(go()) |
解释:
create_pool(minsize=1, maxsize=10, loop=none, **kwargs)
一个协程,创建连接池,连接database
参数:
minsize(int)最小的池子 , 反之maxsize(int)
loop一个可选的事件循环实例,若未循环,使用 asyncio.get_event_loop()
echo(bool)默认log执行sql查询
kwargs
class pool:最重要的是获得连接:
|
with ( yield from pool) as conn: cur = yield from conn.cursor() |
2. aiomysql — api reference
connection
该库用来连接mysql,使用简单的aiomysql.connect(),可以连接一个数据库或者关联池子以连接更多
|
import asyncio # 举例说明 import aiomysql loop = asyncio.get_event_loop() @asyncio .coroutine def test_example(): conn = yield from aiomysql.connect(host = '127.0.0.1' , port = 3306 , user = 'root' , password = ' ', db=' mysql', loop = loop) cur = yield from conn.cursor() yield from cur.execute( "select host,user from user" ) print (cur.description) r = yield from cur.fetchall() print (r) yield from cur.close() conn.close() loop.run_until_complete(test_example()) |
3. cursors 游标
|
import asyncio import aiomysql loop = asyncio.get_event_loop() @asyncio .coroutine def test_example(): conn = yield from aiomysql.connect(host = '127.0.0.1' , port = 3306 , user = 'root' , password = '', db = 'mysql' , loop = loop) # create default cursor cursor = yield from conn.cursor() # execute sql query # 执行sql查询 yield from cursor.execute( "select host, user from user" ) # fetch all results r = yield from cursor.fetchall() # detach cursor from connection yield from cursor.close() # close connection conn.close() loop.run_until_complete(test_example()) |
总结
以上所述是小编给大家介绍的aioysql(异步操作mysql)-python,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
原文链接:https://www.cnblogs.com/devils19/archive/2019/04/11/10689025.html
- python中查看数据类型的内置函数(python学习——内置函数、数据结构、标准库的技巧推荐)
- 如何对python中列表中的数据运算(Python3.5集合及其常见运算实例详解)
- python樱花绽放代码(新年快乐! python实现绚烂的烟花绽放效果)
- python验证码处理教程(python简单验证码识别的实现方法)
- pythonshell入门教程(python获取交互式ssh shell的方法)
- python定时任务详解(使用Python做定时任务及时了解互联网动态)
- python语法规则讲解(计算机二级python学习教程2 python语言基本语法元素)
- python常见知识点整理(Python基础知识点 初识Python.md)
- pythonselenium设置(解决Python selenium get页面很慢时的问题)
- python获取当前时间戳(Python基于datetime或time模块分别获取当前时间戳的方法实例)
- python numpy 安装(python3.6下Numpy库下载与安装图文教程)
- python选择语句形式判断回文数(Python3实现的回文数判断及罗马数字转整数算法示例)
- 能自动点赞的小程序(python实现QQ空间自动点赞功能)
- python怎么用代码写出心形(六行python代码的爱心曲线详解)
- 协程在python中怎么使用(python协程之动态添加任务的方法)
- ubuntu python3.7安装(详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本)
- 提醒 2019年起河南驾考要开设科目五 官方回应来了(2019年起河南驾考要开设科目五)
- 省 市书法家协会 送万福进万家 活动走进禹州美丽乡村(省市书法家协会)
- 点赞 禹州苌庄正式撤乡建镇 未来发展不可估量(禹州苌庄正式撤乡建镇)
- 它荣获 中国生态魅力镇 称号 就在咱们禹州,一起来看看(中国生态魅力镇)
- 真牛 禹州将建成中等城市(禹州将建成中等城市)
- 被骂欺师灭祖,与郭德纲公开叫板,何云伟改名何沄伟,开始画画了(与郭德纲公开叫板)
热门推荐
- 怎么对python中列表进行排序(Python列表常见操作详解获取,增加,删除,修改,排序等)
- sql server 获取时间(SQL SERVER中常用日期函数的具体使用)
- vue弹窗模板(Vue登录页面的动态粒子背景插件实现)
- html5的语法变化(详解HTML5.2版本带来的修改)
- js项目经验(JS实现扫雷项目总结)
- .Net单元测试的方法
- css3轮播案例(纯CSS3实现图片无间断轮播效果)
- python 多进程读取文件(Python实现的多进程拷贝文件并显示百分比功能示例)
- SQL中AVG、COUNT、SUM、MAX等函数对NULL值处理
- linux中基本操作系统有什么(Linux操作系统的概述与简介)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9