FastApi+sqlalchemy异步操作mysql

本文介绍了如何在FastAPI应用中结合sqlalchemy实现异步操作MySQL数据库,包括建立连接、基本的CRUD操作及遇到的问题,如密码中包含@导致的连接问题,以及异步请求的处理方式。同时提到了uvicorn安装注意事项,以确保支持websocket请求。最后,文章指出sqlalchemy的异步功能仍有待完善和发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FastApi+sqlalchemy异步操作mysql

环境:

pip install sqlalchemy==1.4.7  # sqlalchemy 1.4 以前的版本 没有数据库的异步操作
pip install aiomysql==0.0.21 # 一个异步操作mysql的库

数据库的连接:

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine

# 连接字符串,
SQLALCHEMY_DATABASE_URL = "mysql+aiomysql://root:123456@xx.xx.xx.xx:3306/xx?charset=utf8mb4" 

目前发现的问题是,如果数据库的密码中有@字符串,如:密码是 123@456 此时连接字符串被拆分出来的服务器ip是456@xx.xx.xx.xx,这个ip是连不上数据库的,此时需要改动sqlalchemy的源码,在url.py中的_parse_rfc1738_args()方法(如果没更新的话,在705行),将(?:😦?P[^@]))? 这个正则表达式改成(?:😦?P[^@].))?,进行匹配,这样就会根据最后一个@区分割连接字符串了。
在这里插入图片描述

engine = create_async_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(
    class_=AsyncSession,
    autocommit=False,
    autoflush=False,
    bind=engine
)

# 运用 yield 抛出session
async def get_db_session() -> AsyncSession:
    async with SessionLocal() as session:
        yield session

这里运用 FastAPI框架+sqlalchemy+mysql 去做后端,一个简单的demo如下:

表格模型:

from sqlalchemy import Column, Integer, Sequence, String, DateTime, BigInteger, Boolean, Float

class LabFileInfo(Base):  
    __tablename__ = 'table_demo'

    file_id = Column(String, primary_key=True)
    file_name = Column(String)
    file_url = Column(String)
    file_type = Column(Integer)
    template_type = Column(Integer)
    school_id = Column(Integer)
    store_flag = Column(Integer)
    del_flag = Column(Integer)
    creater_id = Column(String)
    create_time = Column(DateTime)
    updater_id = Column(String)
    update_time = Column(DateTime)

    def to_dict(self):
        return dict(file_id=self.file_id, file_name=self.file_name, file_url=self.file_url, file_type=self.file_type,
                    template_type=self.template_type, school_id=self.school_id, store_flag=self.store_flag,
                    creater_id=self.creater_id, create_t
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值