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跑起來



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM