最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

FastAPI連接MySQL實(shí)現(xiàn)自動(dòng)建表的示例代碼

 更新時(shí)間:2026年07月24日 09:40:45   作者:無敵大蛋糕  
本文主要介紹了FastAPI連接MySQL實(shí)現(xiàn)自動(dòng)建表的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 啟動(dòng)本地MySQL服務(wù)

Shell 終端輸入:net start mysql80 ,先啟動(dòng)MySQL服務(wù)

Shell 終端輸入:mysql -u root -p ,然后輸入密碼,進(jìn)入MySQL數(shù)據(jù)庫

Shell 終端輸入:net stop mysql80 ,關(guān)閉MySQL服務(wù)

Shell 終端輸入:(盡量手打,大小寫皆可,注意空格)

CREATE DATABASE IF NOT EXISTS 數(shù)據(jù)庫名字 CHARACTER SET utf8mb4; ,創(chuàng)建數(shù)據(jù)庫

其中:SHOW DATABASES; ,查看所有數(shù)據(jù)庫

高危:DROP DATABASE IF EXISTS 數(shù)據(jù)庫名; ,刪除某個(gè)數(shù)據(jù)庫

2. 安裝依賴

conda環(huán)境輸入:pip install  async sqlalchemy ,安裝異步 ORM 框架,處理數(shù)據(jù)庫交互

conda環(huán)境輸入:pip install aiomysql ,安裝MySQL 異步驅(qū)動(dòng),適配 SQLAlchemy 異步引擎

3. 配置異步數(shù)據(jù)庫,db_config.py

from sqlalchemy.ext.asyncio import async_sessionmaker, AsyncSession, create_async_engine
# 數(shù)據(jù)庫URL
ASYNC_DATABASE_URL = "mysql+aiomysql://root:123456@localhost:3306/pdf_agent?charset=utf8mb4"
# 創(chuàng)建異步引擎
async_engine = create_async_engine(
    ASYNC_DATABASE_URL,  # 傳入數(shù)據(jù)庫連接 URL
    echo=True,  # 可選:開啟 SQL 日志輸出,便于調(diào)試
    pool_size=10,  # 設(shè)置連接池中保持的持久連接數(shù)為 10
    max_overflow=20  # 設(shè)置連接池允許創(chuàng)建的額外連接數(shù)最大為 20
)
# 創(chuàng)建異步會(huì)話工廠
AsyncSessionLocal = async_sessionmaker(
    bind=async_engine,  # 綁定到之前創(chuàng)建的異步引擎
    class_=AsyncSession,  # 指定會(huì)話類為 AsyncSession
    expire_on_commit=False  # 提交后不使對(duì)象屬性過期,保持?jǐn)?shù)據(jù)可訪問
)
# 依賴項(xiàng),用于獲取數(shù)據(jù)庫會(huì)話
async def get_db():
    async with AsyncSessionLocal() as session:
        try:
            yield session  # 將會(huì)話對(duì)象產(chǎn)出給調(diào)用者,暫停函數(shù)執(zhí)行直到請(qǐng)求結(jié)束
            await session.commit()  # 如果無異常,提交事務(wù)
        except Exception:
            await session.rollback()  # 發(fā)生異常時(shí)回滾事務(wù)
            raise  # 重新拋出異常以便上層處理
        finally:
            await session.close()  # 關(guān)閉會(huì)話,釋放資源

4. 創(chuàng)建數(shù)據(jù)庫表

4.1 定義基類

from datetime import datetime, UTC
from sqlalchemy import DateTime, String, Integer
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

def utc_now() -> datetime:
    return datetime.now(UTC)

class Base(DeclarativeBase):
    # 創(chuàng)建時(shí)間:默認(rèn)UTC時(shí)間,北京時(shí)間 = UTC + 8 小時(shí)
    # UTC 是全球統(tǒng)一的標(biāo)準(zhǔn)時(shí)間基準(zhǔn),是互聯(lián)網(wǎng)、服務(wù)器、數(shù)據(jù)庫、日志、GPS、國際業(yè)務(wù)通用時(shí)間
    created_at: Mapped[datetime] = mapped_column(
        DateTime,
        default=utc_now,
        comment="創(chuàng)建時(shí)間(UTC)"
    )
    # 更新時(shí)間:新增默認(rèn)賦值 + 每次update自動(dòng)刷新
    updated_at: Mapped[datetime] = mapped_column(
        DateTime,
        default=utc_now,
        onupdate=utc_now,
        comment="更新時(shí)間(UTC)"
    )

4.2 定義數(shù)據(jù)庫表

from sqlalchemy import Integer, String, Float

class User(Base):
    # 數(shù)據(jù)庫表名
    __tablename__ = "t_user"

    # 字段定義:Mapped 標(biāo)注類型,mapped_column 配置字段屬性
    id: Mapped[int] = mapped_column(
        Integer,
        primary_key=True,
        autoincrement=True,
        name="user_id",
        comment="用戶編號(hào)"
    )
    name: Mapped[str] = mapped_column(
        String(20),
        name="user_name",
        nullable=False,
        comment="用戶名"
    )
    password: Mapped[str] = mapped_column(
        String(20),
        name="user_password",
        nullable=False,
        comment="密碼"
    )

5. 自動(dòng)創(chuàng)建數(shù)據(jù)庫表

FastAPI 提供了事件監(jiān)聽機(jī)制,可以在項(xiàng)目啟動(dòng)(startup)時(shí)執(zhí)行指定邏輯,利用該監(jiān)聽機(jī)制實(shí)現(xiàn)數(shù)據(jù)庫表的自動(dòng)創(chuàng)建。

from backend.db_models.db_file import Base
from backend.config.db_conf import async_engine

# 定義異步建表函數(shù)
async def create_tables():
    async with async_engine.begin() as conn:
        # run_sync包裹同步的create_all,創(chuàng)建所有繼承Base的表)
        await conn.run_sync(Base.metadata.create_all)

# FastAPI 啟動(dòng)事件:服務(wù)運(yùn)行自動(dòng)執(zhí)行建表
@app.on_event("startup")
async def startup_event():
    await create_tables()

啟動(dòng) FastAPI 項(xiàng)目, uvicorn main:app --reload,可以看到表被創(chuàng)建

6. PyCharm 手動(dòng)連接MySQL數(shù)據(jù)庫

依次點(diǎn)擊:

輸入用戶名 root 和 密碼,點(diǎn)擊測試連接

點(diǎn)擊旁邊的 ... ,勾上表名 pdf_agent ,可以看到我們建的數(shù)據(jù)庫表,也可以進(jìn)行操作

到此這篇關(guān)于FastAPI連接MySQL實(shí)現(xiàn)自動(dòng)建表的示例代碼的文章就介紹到這了,更多相關(guān)MySQL 自動(dòng)建表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySql?InnoDB存儲(chǔ)引擎之Buffer?Pool運(yùn)行原理講解

    MySql?InnoDB存儲(chǔ)引擎之Buffer?Pool運(yùn)行原理講解

    緩沖池是用于存儲(chǔ)InnoDB表,索引和其他輔助緩沖區(qū)的緩存數(shù)據(jù)的內(nèi)存區(qū)域。緩沖池的大小對(duì)于系統(tǒng)性能很重要。更大的緩沖池可以減少磁盤I/O來多次訪問同一表數(shù)據(jù)。在專用數(shù)據(jù)庫服務(wù)器上,可以將緩沖池大小設(shè)置為計(jì)算機(jī)物理內(nèi)存大小的百分之80
    2023-01-01
  • mysql中text,longtext,mediumtext區(qū)別小結(jié)

    mysql中text,longtext,mediumtext區(qū)別小結(jié)

    在 MySQL 中,text、mediumtext 和 longtext 都是用來存儲(chǔ)大量文本數(shù)據(jù)的數(shù)據(jù)類型,本文就來詳細(xì)的介紹一下這三種類型的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • C#編寫方法實(shí)例

    C#編寫方法實(shí)例

    在下面的練習(xí)中,將創(chuàng)建一個(gè)應(yīng)用程序,它包含的一個(gè)方法能夠計(jì)算一名顧問的收費(fèi)金額——假定該顧問每天收取固定的費(fèi)用,將根據(jù)工作了多少天來收費(fèi)。首先要開發(fā)應(yīng)用程序的邏輯,然后利用“生成方法存根向?qū)А眮韺懗鲞@個(gè)邏輯使用的方法。接著,我們將在一個(gè)控制臺(tái)應(yīng)用程序中運(yùn)行方法,以獲得對(duì)該程序的最終印象。最后,我們將使用Visual Studio 2005調(diào)試器來檢查方法調(diào)用。
    2008-04-04
  • 詳細(xì)講一講MySQL中Select語句的執(zhí)行順序

    詳細(xì)講一講MySQL中Select語句的執(zhí)行順序

    SQL和MySQL的語句執(zhí)行順序是數(shù)據(jù)庫操作中的關(guān)鍵概念,理解這一順序有助于編寫更高效、更精確的查詢,這篇文章主要介紹了MySQL中Select語句執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • MySQL回表產(chǎn)生的原因和場景

    MySQL回表產(chǎn)生的原因和場景

    在MySQL數(shù)據(jù)庫中,回表(Look Up)指的是在進(jìn)行索引查詢時(shí),首先通過索引定位到對(duì)應(yīng)頁,然后再根據(jù)行的物理地址找到所需的數(shù)據(jù)行,本文給大家介紹了MySQL回表是什么以及哪些情況下會(huì)回表,需要的朋友可以參考下
    2023-11-11
  • Linux系統(tǒng)每日定時(shí)備份mysql數(shù)據(jù)的方法步驟

    Linux系統(tǒng)每日定時(shí)備份mysql數(shù)據(jù)的方法步驟

    這篇文章主要介紹了Linux系統(tǒng)每日定時(shí)備份mysql數(shù)據(jù)的方法步驟,包括創(chuàng)建文件夾、編寫腳本、設(shè)置定時(shí)任務(wù)和測試腳本,詳細(xì)步驟涵蓋從文件夾創(chuàng)建到腳本執(zhí)行的全過程,幫助用戶實(shí)現(xiàn)數(shù)據(jù)庫的自動(dòng)備份,需要的朋友可以參考下
    2024-11-11
  • MongoDB日期查詢操作圖文詳解

    MongoDB日期查詢操作圖文詳解

    MongoDB中按日期查詢是一種常見的查詢操作,而按日期查詢也是開發(fā)人員在MongoDB工作中最常遇到的查詢?nèi)蝿?wù)之一,這篇文章主要給大家介紹了關(guān)于MongoDB日期查詢操作的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • mysql server is running with the --skip-grant-tables option

    mysql server is running with the --skip-grant-tables option

    今天在mysql中新建數(shù)據(jù)庫提示The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,原來是數(shù)據(jù)中配置的--skip-grant-tables,這樣安全就降低了,這個(gè)一般當(dāng)忘記root密碼的時(shí)候需要這樣操作
    2017-07-07
  • MySQL 鎖體系從 MDL到間隙鎖詳解

    MySQL 鎖體系從 MDL到間隙鎖詳解

    本文詳細(xì)解析了MySQL的鎖機(jī)制,包括MDL鎖、意向鎖和鎖,并解釋了不同鎖的的使用場景和潛在問題沖突,強(qiáng)調(diào)理解鎖機(jī)制對(duì)以優(yōu)化數(shù)據(jù)庫性能,感興趣的朋友一起看看吧
    2026-06-06
  • MYSQL插入處理重復(fù)鍵值的幾種方法

    MYSQL插入處理重復(fù)鍵值的幾種方法

    當(dāng)unique列在一個(gè)UNIQUE鍵上插入包含重復(fù)值的記錄時(shí),默認(rèn)insert的時(shí)候會(huì)報(bào)1062錯(cuò)誤,MYSQL有三種不同的處理方法,下面我們分別介紹。
    2012-09-09

最新評(píng)論

临沂市| 寿光市| 绥棱县| 曲周县| 肥城市| 翁源县| 綦江县| 武冈市| 唐海县| 道真| 汉源县| 新余市| 红原县| 凌源市| 乐山市| 宁强县| 东港市| 五华县| 河池市| 托里县| 永吉县| 德清县| 龙门县| 宜丰县| 临颍县| 遂昌县| 准格尔旗| 元氏县| 河西区| 宾川县| 赤峰市| 大荔县| 永川市| 资阳市| 阿巴嘎旗| 台南市| 潮安县| 云安县| 海淀区| 桑日县| 北川|