iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >python模块之 aiomysql 异步mysql
  • 455
分享到

python模块之 aiomysql 异步mysql

pythonmysql 2023-09-26 13:09:29 455人浏览 安东尼
摘要

mysql安装教程 mysql语法大全 python 模块pymysql模块,连接mysql数据库 一、介绍 aioMysql 是一个基于 asyncio 的异步 mysql 客户端库,用于在 pyt

mysql安装教程
mysql语法大全
python 模块pymysql模块,连接mysql数据库

一、介绍

aioMysql 是一个基于 asyncio 的异步 mysql 客户端库,用于在 python 中与 Mysql 数据库进行交互。它提供了异步的数据库连接和查询操作,适用于异步编程环境

  1. 异步支持:aiomysql 是基于 asyncio 实现的,可以与 asyncio 框架无缝集成,充分利用异步编程的优势,提高应用程序的性能和并发能力。
  2. 高性能:aiomysql 使用了底层的 PyMySQL 库,通过异步操作和连接池技术,可以实现高性能的数据库访问。
  3. 支持事务:aiomysql 提供了事务管理的支持,可以执行原子性的数据库操作,保证数据的一致性。
  4. SQL 语句构建器:aiomysql 提供了一个 SQL 语句构建器,可以方便地构建和执行 SQL 查询。
二、安装
pip install aiomysql
三、方法及属性
  1. aiomysql.connect():连接mysql,conn = await aiomysql.connect(host=‘localhost’, port=3307, user=‘root’, passWord=‘root’)
  • host:MySQL 服务器的主机名或 IP 地址。
  • port:MySQL 服务器的端口号,默认为 3306。
  • user:连接 MySQL 服务器的用户名。
  • password:连接 MySQL 服务器的密码。
  • db:连接的数据库名称。
  • unix_Socket:UNIX 域套接字路径。如果指定了 unix_socket,则会忽略 host 和 port 参数。
  • charset:连接的字符集,默认为 “utf8mb4”。
  • autocommit:自动提交模式,默认为 False。如果设置为 True,则每个 SQL 语句都会自动提交。
  • connect_timeout:连接超时时间(以秒为单位),默认为 10 秒。
  • maxsize:连接池中的最大连接数,默认为 10。
  • minsize:连接池中的最小连接数,默认为 1。
  • ssl:SSL 配置参数。可以传入一个字典,包含 SSL 相关的配置选项,如 ssl={‘cert’: ‘/path/to/cert.pem’, ‘key’: ‘/path/to/key.pem’}。
  • loop:事件循环对象。如果不指定,将使用默认的事件循环。
  • pool_recycle:连接池中连接的回收时间(以秒为单位)。当连接在连接池中的时间超过 pool_recycle 时,连接将被回收并重新创建。
  • echo:是否打印 SQL 语句,默认为 False。如果设置为 True,则会在控制台打印执行的 SQL 语句。
  • cursorclass:游标类,默认为 aiomysql.cursors.DictCursor,返回的查询结果将以字典形式返回。
  • server_public_key:服务器公钥,用于 SSL/TLS 连接的服务器验证。
  1. aiomysql.create_pool():创建一个连接池。该方法用于创建一个异步连接池,接受一系列的连接参数,例如数据库主机、端口、用户名、密码等。pool = await aiomysql.create_poo(host=‘localhost’, port=3307, user=‘root’, password=‘root’)
  • host:MySQL 服务器的主机名或 IP 地址。
  • port:MySQL 服务器的端口号,默认为 3306。
  • user:连接 MySQL 服务器的用户名。
  • password:连接 MySQL 服务器的密码。
  • db:连接的数据库名称。
  • unix_socket:UNIX 域套接字路径。如果指定了 unix_socket,则
    忽略 host 和 port 参数。
  • charset:连接的字符集,默认为 “utf8mb4”。
  • autocommit:自动提交模式,默认为 False。如果设置为 True,则每个 SQL 语句都会自动提交。
  • minsize:连接池中的最小连接数,默认为 1。
  • maxsize:连接池中的最大连接数,默认为 10。
  • connect_timeout:连接超时时间(以秒为单位),默认为 10 秒。
  • pool_recycle:连接池中连接的回收时间(以秒为单位)。当连接在连接池中的时间超过 pool_recycle 时,连接将被回收并重新创建。
  • ssl:SSL 配置参数。可以传入一个字典,包含 SSL 相关的配置选项,如 ssl={‘cert’: ‘/path/to/cert.pem’, ‘key’: ‘/path/to/key.pem’}。
  • loop:事件循环对象。如果不指定,将使用默认的事件循环。
  • echo:是否打印 SQL 语句,默认为 False。如果设置为 True,则会在控制台打印执行的 SQL 语句。
  • cursorclass:游标类,默认为 aiomysql.cursors.DictCursor,返回的查询结果将以字典形式返回。
  • server_public_key:服务器公钥,用于 SSL/TLS 连接的服务器验证
  1. pool.acquire():从连接池中获取一个连接。该方法用于从连接池中获取一个异步连接对象,可以用于执行数据库操作。coon = pool.acquire()
  2. pool.release(coon):释放一个连接。该方法用于将一个连接对象返回到连接池中,以便其他代码可以继续使用。
  3. pool.close() :用于关闭连接池。调用 close() 方法后,连接池将不再接受新的连接请求,并开始关闭池中的所有连接。
  4. pool.wait_closed():用于等待连接池中的所有连接关闭。在调用 close() 方法后,应该调用 wait_closed() 方法来确保所有连接都已关闭,然后才能结束程序。
  5. pool.size:表示连接池的当前大小,即池中当前可用的连接数。
  6. pool.maxsize:表示连接池的最大连接数。当连接池中的连接数达到最大值时,新的连接请求将被阻塞,直到有连接被释放。
  7. pool.minsize:表示连接池的最小连接数。连接池在初始化时会创建最小连接数的连接,并保持这些连接处于活动状态。
  8. conn.close():关闭连接。该方法用于关闭连接,释放资源。
  9. conn.host:MySQL 服务器的主机名或 IP 地址。
  10. conn.port:MySQL 服务器的端口号。
  11. conn.user:连接 MySQL 服务器的用户名。
  12. conn.db:当前连接的数据库名称。
  13. conn.server_status:MySQL 服务器的状态信息。
  14. conn.server_capabilities:MySQL 服务器的功能列表。
  15. conn.client_flag:客户端标志。
  16. conn.insert_id:最近插入行的自增 ID。
  17. conn.warning_count:最近一次执行的 SQL 语句产生的警告数量。
  18. conn.errorhandler:错误处理器。
  19. conn.autocommit:自动提交模式。该属性用于设置是否开启自动提交模式,默认为 False。
  20. conn.charset:字符集。该属性用于设置数据库连接的字符集,默认为 “utf8mb4”。
  21. conn.maxsize:最大连接数。该属性用于设置连接池中的最大连接数,默认为 10。
  22. conn.minsize:最小连接数。该属性用于设置连接池中的最小连接数,默认为 1。
  23. conn.timeout:连接超时时间。该属性用于设置连接的超时时间,默认为 10 秒。
  24. conn.echo:是否打印 SQL 语句。该属性用于设置是否在控制台打印执行的 SQL 语句,默认为 False。
  25. conn.loop:事件循环对象。该属性用于设置要使用的事件循环对象。
  26. conn.connection:当前连接对象。该属性用于获取当前的连接对象。
  27. conn.server_version:MySQL 服务器版本。该属性用于获取 MySQL 服务器的版本信息。
  28. conn.commit():提交事务。该方法用于提交当前事务的操作。
  29. conn.begin():提开始一个事务。
  30. conn.ping():检查连接是否存活。
  31. conn.select_db(dbName):切换数据库
  32. conn.escape_string(string):对字符串进行 MySQL 转义。
  33. conn.rollback():回滚事务。该方法用于回滚当前事务的操作。
  34. conn.cursor():创建一个游标对象。该方法用于创建一个异步游标对象,用于执行 SQL 查询和操作。cursor=conn.cursor()
  35. cursor.close():关闭游标对象
  36. cursor.execute(sql, args=None):执行 SQL 语句。该方法用于执行 SQL 语句,接受 SQL 语句字符串和参数,可以执行查询、插入、更新等操作。
  37. cursor.executemany(sql, args=None):执行多个 SQL 语句。该方法用于执行多个相同结构的 SQL 语句,接受 SQL 语句字符串和参数列表。
  38. cursor.fetchone():获取一条查询结果。该方法用于获取查询结果的下一行数据。
  39. cursor.fetchall():获取所有查询结果。该方法用于获取查询结果的所有行数据。
  40. cursor.fetchmany(size=None):获取查询结果的多行。
  41. cursor.rowcount:最近一次执行的 SQL 语句影响的行数。
  42. cursor.lastrowid:最近插入行的自增 ID。
  43. cursor.description:查询结果的字段描述信息。
  44. cursor.rownumber:当前行在查询结果中的索引
  45. cursor.arraysize:获取或设置从数据库获取的行数。
四、案例
  1. 基本使用 aiomysql.connect()
    import aiomysqlimport asyncioasync def main():    conn = await aiomysql.connect(host='localhost', port=3306, user='root', password='root',db='job')    cursor = await conn.cursor()    await cursor.execute('SELECT * FROM baidu_job;')    result = await cursor.fetchall()    print(result)    await cursor.close()    conn.close()asyncio.run(main())
  2. 连接池 aiomysql.create_pool(),建议使用连接池
    import aiomysqlimport asyncioasync def main():    pool = await aiomysql.create_pool(host='localhost', port=3306, user='root', password='root',db='job')    async with pool.acquire() as conn:        async with conn.cursor() as cursor:            await cursor.execute('SELECT * FROM baidu_job;')            result = await cursor.fetchall()            print(result)asyncio.run(main())
  3. 连接池爬取汽车之家数据
    '''网址:https://www.che168.com/china/a0_0msdgscncgpi1ltocsp7exf4x0/?pvareaid=102179#currengpostion'''import asyncioimport aioHttpimport aiomysqlfrom lxml import etreeimport randomclass Car:    url = {        'car_list': 'https://www.che168.com/china/a0_0msdgscncgpi1ltocsp{}exf4x0/?pvareaid=102179#currengpostion',        'car_detail': 'https://cacheapiGo.che168.com/CarProduct/GetParam.ashx?specid={}'    }    headers = {        'authority': 'www.che168.com',        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/WEBp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',        'accept-language': 'zh-CN,zh;q=0.9',        'cache-control': 'no-cache',        'pragma': 'no-cache',        'referer': 'https://www.che168.com/dealer/481320/48787661.html?pvareaid=100519&userpid=0&usercid=0&offertype=&offertag=0&activitycartype=0&fromsxmlist=0',        'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"',        'sec-ch-ua-mobile': '?0',        'sec-ch-ua-platfORM': '"windows"',        'sec-fetch-dest': 'document',        'sec-fetch-mode': 'navigate',        'sec-fetch-site': 'same-origin',        'sec-fetch-user': '?1',        'upgrade-insecure-requests': '1',        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',    }    def __init__(self):        self.pool = None        self.request = None    '''获取汽车列表'''    async def get_car_list(self, page):        print(self.url['car_list'].format(page))        response = await self.request.get(self.url['car_list'].format(page))        result = await response.text(encoding='GBK')        return etree.HTML(result)    '''处理汽车列表信息'''    async def parse_car_list_info(self, html):        car_list_html = html.xpath('//div[@id="goodStartSolrQuotePriceCore0"]//li[@name="lazyloadcpc"]')        task_list = []        for item in car_list_html:            car_info = {                'specid': item.xpath('./@specid')[0],                'infoid': item.xpath('./@infoid')[0]            }            task = asyncio.create_task(self.get_car_detail(car_info))            task_list.append(task)        await asyncio.wait(task_list)    '''获取第一页数据,并返回总页数'''    async def get_first_page(self):        html = await self.get_car_list(1)        page_total = html.xpath('//div[@id="listpagination"]/a[last()-1]/text()')[0]        await self.parse_car_list_info(html)        return int(page_total)    '''获取除第一页数据之外的其他页数据'''    async def get_all_page(self,page):        async with self.semaphore:            await asyncio.sleep(random.randint(500, 800) / 1000)            html = await self.get_car_list(page)            await self.parse_car_list_info(html)    '''获取汽车详情'''    async def get_car_detail(self, car_info):        response = await self.request.get(self.url['car_detail'].format(car_info['specid']))        result = await response.JSON()        detail = result['result']['paramtypeitems']        car_detail = {            'specid': car_info['specid'],            'infoid': car_info['infoid'],            'name': detail[0]['paramitems'][0]['value'],            'price': detail[0]['paramitems'][1]['value'],            'manufacturer': detail[0]['paramitems'][2]['value'],            'level': detail[0]['paramitems'][3]['value'],            'length': f'{detail[1]["paramitems"][0]["value"]}mm',            'width': f'{detail[1]["paramitems"][1]["value"]}mm',            'height':f'{detail[1]["paramitems"][2]["value"]}mm',        }        await self.insert_table(car_detail)    '''异步建立mysql表'''    async def create_table(self):        sql = '''        CREATE TABLE IF NOT EXISTS qichezhijia(        Id INT UNIQUE,        Specid INT,        Name VARCHAR(255),        Price VARCHAR(10),        Manufacturer VARCHAR(255),        Level VARCHAR(50),        Length VARCHAR(10),        Width VARCHAR(10),        Height VARCHAR(10),        PRIMARY KEY(Id)        )        '''        async with self.pool.acquire() as conn:            async with conn.cursor() as cursor:                try:                    await cursor.execute(sql)                except Exception as e:                    print(f'创建表失败{e}')    '''插入数据'''    async def insert_table(self,car_detail):        sql = '''        INSERT INTO qichezhijia VALUES(%(infoid)s,%(specid)s,%(name)s,%(price)s,%(manufacturer)s,%(level)s,%(length)s,%(width)s,%(height)s)        '''        async with self.pool.acquire() as conn:            async with conn.cursor() as cursor:                try:                    await cursor.execute(sql, car_detail)                    await conn.commit()                    print('数据插入成功')                except Exception as e:                    print(f'插入数据失败{e},infoid={car_detail["infoid"]}')    '''程序运行主函数'''    async def main(self):        async with aiomysql.create_pool(host='localhost', port=3306, user='root', password='root', db='car') as pool:            self.pool = pool            await self.create_table()            async with aiohttp.ClientSession(headers=self.headers) as request:                self.request = request                page_total = await self.get_first_page()                self.semaphore = asyncio.Semaphore(3)                task_list = []                for page in range(2,page_total+1):                    task = asyncio.create_task(self.get_all_page(page))                    task_list.append(task)                await asyncio.wait(task_list)if __name__ == '__main__':    car = Car()    asyncio.run(car.main())

来源地址:https://blog.csdn.net/randy521520/article/details/132713887

您可能感兴趣的文档:

--结束END--

本文标题: python模块之 aiomysql 异步mysql

本文链接: https://www.lsjlt.com/news/418544.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python模块之 aiomysql 异步mysql
    mysql安装教程 mysql语法大全 python 模块pymysql模块,连接mysql数据库 一、介绍 aiomysql 是一个基于 asyncio 的异步 MySQL 客户端库,用于在 Pyt...
    99+
    2023-09-26
    python mysql
  • aiomysql异步操作mysql
    aiomysql是一个从asyncio(PEP-3156/tulip)框架访问MySQL数据库的库。它依赖并重用PyMySQL的大部分部分。aiomysql试图成为一个很棒的aiopg库,并保留相同的api、外观和感觉。在内部aimysql...
    99+
    2023-01-31
    操作 aiomysql mysql
  • python中asyncore异步模块的实现
    目录模块常见方法asyncore 实例asyncore即是一个异步的socket封装,特别是dispatcher类中包含了很多异步调用的socket操作方法。 模块常见方法 这个模块...
    99+
    2023-01-18
    python asyncore异步模块 python asyncore异步
  • Python之异常处理、模块与包
    MarkdownPad Document程序中错误分成两种语法错误:过不了Python解释器逻辑错误异常处理什么是异常处理Python解释器检测到错误,触发异常,在发生异常时捕捉异常,如果捕捉成功则进入另外一个处理分支,是程序不会崩溃,这就...
    99+
    2023-01-31
    模块 异常 Python
  • Python模块学习之IPy模块
    IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。Python提供了一个强大的第...
    99+
    2023-01-31
    模块 Python IPy
  • Python时间模块之datetime模块
    目录 简介 函数介绍及运用 date:日期类 1.获取当前时间  2.日期对象的属性 3.date类中时间和时间戳的转换: 4.修改日期使用replace方法  time:时间类  time类操作 datetime:日期时间类 timede...
    99+
    2023-09-12
    python datetime python 日期时间
  • python之os模块
    #OS模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块:import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) #chdir()改变当前工作目录 #操作时如果书写完整的路径则不...
    99+
    2023-01-30
    模块 python os
  • python模块之collections
    计数器 Counter 计数元素迭代器 elements() 计数对象拷贝 copy() 计数对象清空 clear() from collections import Counter #import collection...
    99+
    2023-01-30
    模块 python collections
  • Python 之os模块
    os模块提供了访问多个操作系统服务的功能,os模块的子模块os.path模块也包含了一些文件目录常用操作的函数。access(path, mode) :检测对文件的访问权限。>>> os.access('/root/zhu...
    99+
    2023-01-31
    模块 Python os
  • Python 之 pexpect模块
    python安装setuptools模块之后,便可使用easy_install来安装python的第三方扩展模块,默认安装路径是:/usr/lib/python2.6/site-packages/easy_install 模块名 #可以直接...
    99+
    2023-01-31
    模块 Python pexpect
  • python模块之hashlib
    hashlib模块实现了多种安全哈希和信息摘要算法的通用接口,包括FIPS中定义的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定义的MD5 注意点:1. adler32及crc32哈希由z...
    99+
    2023-01-31
    模块 python hashlib
  • Python 之 paramiko 模块
    paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接1.安装#paramiko模块的安装需要先安装PyCrypto模块 wget https://pypi.python.or...
    99+
    2023-01-31
    模块 Python paramiko
  • python之selectors模块
      selectors模块是在python3.4版本中引进的,它封装了IO多路复用中的select和epoll,能够更快,更方便的实现多并发效果。  官方文档见:https://docs.python.org/3/library/...
    99+
    2023-01-31
    模块 python selectors
  • python模块之shutil
    shutil模块提供了一些针对文件和目录的高级操作,主要是拷贝、移动。对于单个文件的操作,还可参考os模块 Warning:即使是高级别的拷贝函数(shutil.copy(),shutil.copy2())也不能拷贝所有的文件元数据。意思...
    99+
    2023-01-31
    模块 python shutil
  • Python 之 shutil模块
    shutil模块用于执行高级的文件操作,如复制,移动重命名等。>>> shutil. shutil.Error shutil._samefile shutil.__all__ s...
    99+
    2023-01-31
    模块 Python shutil
  • python之netifaces模块
    #!/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- """ Create Date:        2016/12/26 Create Time:        17:53 ...
    99+
    2023-01-31
    模块 python netifaces
  • python之sys模块
    sys.argv 命令行参数List,第一个元素是程序本身路径;类似于shell的位置参数 sys.argv[0] 表示程序自身sys.argv[1] 表示程序的第一个参数sys.argv[2] 表示程序的第二个参数 #!/usr...
    99+
    2023-01-31
    模块 python sys
  • Python模块之pexpect
    pexpect是一个用来启动子程序并对其进行自动控制的 Python 模块。pexpect 可以用来和像 ssh、passwd、telnet 、rsync等命令行程序进行自动交互下面是我用pexpect写的一个脚本,是用来执行远程主机命令,...
    99+
    2023-01-31
    模块 Python pexpect
  • Python之Subprocess模块
    前言其实有一个模块也支持执行系统命令,那个模块就是sys.system,但他执行系统命令会直接通过主进程去执行命令,那假如,该命令的执行需要耗费一个小时,那么主进程会卡一个小时,而不会去干别的事,这样就会导致程序的运行效率低下。 如果由su...
    99+
    2023-01-31
    模块 Python Subprocess
  • python模块之base64
    base64模块提供了在二进制数据和可打印ASCII字符间编解码的功能,包括RFC3548中定义的Base16, Base32, Base64, Ascii85, Base85等编码。 RFC3548中定义的编码适用于将二进制数据编码后,...
    99+
    2023-01-31
    模块 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作