howie6879 / howie6879.github.io

努力就好
https://www.howie6879.com/
9 stars 0 forks source link

Sanic 使用教程 - 5.数据库使用 #143

Open howie6879 opened 2 years ago

howie6879 commented 2 years ago

https://www.howie6879.cn/p/sanic-%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B-5.%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%BF%E7%94%A8/

介绍中说的很明白,Sanic 是一个可以使用 async/await 语法编写项目的异步非阻塞框架,既然是异步框架,那么在使用过程中用到的第三方包也最好是异步的,比如http请求,最好就使用aihttp而非requests,对于数据库的连接,也是同样如此,下面我将用代码的形式来说明下如何在Sanic中连接数据库。 操作Mysql 对于mysql数据库的异步操作,我只在一些脚本中用过,用的是aiomysql,其中官方文档中讲得很清楚,也支持结合sqlalchemy编写ORM,然后aiomysql提供了自己编写的异步引擎。 from aiomysql.sa import create_engine # 这个才是关键 下面我编写一个具体的例子来用异步语句操作下数据库,首先建立如下目录: aio_mysql ├── demo.py ├── model.py └── requirements.txt 建立表: createdatabasetest_mysql;CREATETABLEuser(idINTAUTO_INCREMENTPRIMARYKEY,user_nameVARCHAR(16)NOTNULL,pwdVARCHAR(32)NOTNULL,real_nameVARCHAR(6)NOTNULL);一切准备就绪,下面编写代码:

script: model.py import sqlalchemy as sa metadata = sa.MetaData() user = sa.Table( 'user', metadata, sa.Column('id', sa.Integer, autoincrement=True, primary_key=True), sa.Column('user_name', sa.String(16), nullable=False), sa.Column('pwd', sa.String(32), nullable=False), sa.Column('real_name', sa.String(6), nullable=False), ) # script: demo.py import asyncio from aiomysql.sa import create_engine from model import user,metadata async def go(loop): """ aiomysql项目地址:https://github.com/aio-libs/aiomysql :param loop: :return: """ engine = await create_engine(user='root', db='test_mysql', host='127.