• FastAPI连接mysql傻瓜式


    FastAPI连接mysql傻瓜式

    只是纪录一下自己的学习,想要好好学的可以看官方文档https://fastapi.tiangolo.com/tutorial/sql-databases/#create-the-database-models

    SQLAlchemy 介绍

    在 FastAPI 中对数据库的操作有一个非常优秀的 ORM 库,利用此库在 FastAPI 中操作数据库可以快速实现 FastAPI 项目连接数据库,它就是 SQLAlchemy。

    SQLAlchemy 是Python SQL 工具箱和对象关系映射器,为应用程序开发人员提供了SQL 的全部功能和灵活性。它提供了一整套知名的企业级持久性模式,旨在高效,高性能地访问数据库,并适配了简单、高性能的 Pythonic 语言。

    总之,官方文档里面用的就是这个orm

    配置

    官方文档中是直接给一个目录

    └── sql_app
    ├── __init__.py
    ├── crud.py
    ├── database.py
    ├── main.py
    ├── models.py
    └── schemas.py
    

    我直接写成面条版,更加方便我记忆使用mysql的流程

    from fastapi import Depends,FastAPI
    # 首先应该安装fastapi,sqlalchemy
    from sqlalchemy import Boolean, Column, Integer, String,DateTime
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker
    import datetime
    
    # 与mysql连接
    # 格式为 'mysql+pymysql://账号名:密码@ip:port/数据库名'
    SQLALCHEMY_DATABASE_URI:str = 'mysql+pymysql://root:6008@localhost:3306/fasttest'
    
    # 生成一个SQLAlchemy引擎
    engine = create_engine(SQLALCHEMY_DATABASE_URI,pool_pre_ping=True)
    # 生成sessionlocal类,这个类的每一个实例都是一个数据库的会话
    # 注意命名为SessionLocal,与sqlalchemy的session分隔开
    SessionLocal = sessionmaker(autocommit=False,autoflush=False,bind=engine)
    session = SessionLocal()
    
    Base = declarative_base()
    # Base是用来给模型类继承的,类似django中的models.Model
    
    # 模型类,tablename指表名,如果数据库中没有这个表会自动创建,有表则会沿用
    class order_order(Base):
        __tablename__ = "order_order"
        order_id = Column(String(18), primary_key=True, index=True)
        # Column就类似django里的Table.objects
        # 里面放字段,字段必须在上面先导入
        state_type = Column(Integer,default=1)
        submit_time = Column(DateTime)
        cus_phone = Column(String(11))
        cabinet_id = Column(String(4))
    
    Base.metadata.create_all(bind=engine)
    # 此步也必不可少
    app = FastAPI()
    # 创建fastapi对象
    
    @app.get("/list")
    async def main():
    # 生成接口:127.0.0.1:8000/list
        order_list = []
        order = session.query(order_order).filter(order_order.submit_time>datetime.datetime.now()-datetime.timedelta(days=3)).all()
        # 除了查询,当然还有别的query方法,随着学习陆续更新
        session.close()
        for i in range(len(order)):
            order_list.append(
                {
                    'order_id':order[i].order_id,
                    'cabinet_id':order[i].cabinet_id,
                    'submit_time':order[i].submit_time,
                    'state_type':order[i].state_type,
                    'cus_phone':order[i].cus_phone,
                }
            )
        return order_list
        # 返回列表
    
    
    if __name__ == '__main__':
        import uvicorn
        uvicorn.run(app,host="127.0.0.1",port=8000)
    	# 让fastapi跑起来
    
    
    
  • 相关阅读:
    10-18 noip提高组模拟赛(codecomb)T2贪心
    vj1011:记忆化搜索
    vj1010:高精乘+细心模拟
    10-18 noip提高组模拟赛(codecomb)T1倍增[未填]
    CODEFORCES ROUND #273 DIV2
    Unkown2
    2014.first[未填]
    Unknown
    历年noip复赛试题整合
    快速幂(模板)
  • 原文地址:https://www.cnblogs.com/telecasterfanclub/p/13532050.html
Copyright © 2020-2023  润新知