国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python FastAPI 框架 操作Mysql數(shù)據(jù)庫 增刪改查

這篇具有很好參考價值的文章主要介紹了Python FastAPI 框架 操作Mysql數(shù)據(jù)庫 增刪改查。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

2 比 1 更容易理解,可以先看2(單文件級別)
fastapi mysql,web開發(fā),數(shù)據(jù)庫,python,fastapi

1、FastAPI 框架 操作Mysql數(shù)據(jù)庫(項目多文件級別)

FastAPI 可以使用任何您想要的關(guān)系型數(shù)據(jù)庫。
在這里,讓我們看一個使用著SQLAlchemy的示例。
您可以很容易地將SQLAlchemy支持任何數(shù)據(jù)庫,像:

  • PostgreSQL
  • MySQL
  • SQLite
  • Oracle
  • Microsoft SQL Server,等等其它數(shù)據(jù)庫
    在此示例中,我們將使用SQLite,因為它使用單個文件并且 在Python中具有集成支持。因此,您可以復(fù)制此示例并按原樣來運行它。

稍后,對于您的產(chǎn)品級別的應(yīng)用程序,您可能會要使用像PostgreSQL這樣的數(shù)據(jù)庫服務(wù)器。

1.0 創(chuàng)建mysql數(shù)據(jù)庫

  • 創(chuàng)建test數(shù)據(jù)庫,數(shù)據(jù)庫創(chuàng)建users表和items表

  • users表

fastapi mysql,web開發(fā),數(shù)據(jù)庫,python,fastapi

  • items表

fastapi mysql,web開發(fā),數(shù)據(jù)庫,python,fastapi

1.1 測試項目文件結(jié)構(gòu)

對于這些示例,假設(shè)您有一個名為的目錄my_super_project,其中包含一個名為的子目錄sql_app,其結(jié)構(gòu)如下:

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

該文件__init__.py只是一個空文件,但它告訴 Python 其中sql_app的所有模塊(Python 文件)都是一個包。

1.2 數(shù)據(jù)庫配置 database.py

# 1、導(dǎo)入 SQLAlchemy 部件
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 連接mysql數(shù)據(jù)庫需要導(dǎo)入pymysql模塊
import pymysql
pymysql.install_as_MySQLdb()

# 2、為 SQLAlchemy 定義數(shù)據(jù)庫 URL地址
# 配置數(shù)據(jù)庫地址:數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動名稱://用戶名:密碼@機器地址:端口號/數(shù)據(jù)庫名
SQLALCHEMY_DATABASE_URL = "mysql://test:123456@127.0.0.1:3306/test"

# 3、創(chuàng)建 SQLAlchemy 引擎
engine = create_engine(SQLALCHEMY_DATABASE_URL, encoding='utf-8')


# 4、創(chuàng)建數(shù)據(jù)庫會話
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 5、創(chuàng)建一個Base類declarative_base
# 稍后我們將用這個類繼承,來創(chuàng)建每個數(shù)據(jù)庫模型或類(ORM 模型)
Base = declarative_base()

1.3 創(chuàng)建數(shù)據(jù)庫模型 models.py

用Base類來創(chuàng)建 SQLAlchemy 模型
我們將使用我們之前創(chuàng)建的Base類來創(chuàng)建 SQLAlchemy 模型。

SQLAlchemy 使用的“模型”這個術(shù)語 來指代與數(shù)據(jù)庫交互的這些類和實例。
而 Pydantic 也使用“模型”這個術(shù)語 來指代不同的東西,即數(shù)據(jù)驗證、轉(zhuǎn)換以及文檔類和實例。

from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship

# 1、從database.py導(dǎo)入Base類
from .database import Base

# User繼承Base類
class User(Base):
    # 表名
    __tablename__ = "users"

    # 2、創(chuàng)建模型屬性/列,使用Column來表示 SQLAlchemy 中的默認值。
    id = Column(Integer, primary_key=True, index=True)
    email = Column(String, unique=True, index=True)
    hashed_password = Column(String)
    is_active = Column(Boolean, default=True)

    # 3、創(chuàng)建關(guān)系
    # 當訪問 user 中的屬性items時,如 中my_user.items,它將有一個ItemSQLAlchemy 模型列表(來自items表),這些模型具有指向users表中此記錄的外鍵
    # 當您訪問my_user.items時,SQLAlchemy 實際上會從items表中的獲取一批記錄并在此處填充進去。
    # 同樣,當訪問 Item中的屬性owner時,它將包含表中的UserSQLAlchemy 模型users。使用owner_id屬性/列及其外鍵來了解要從users表中獲取哪條記錄。
    items = relationship("Item", back_populates="owner")

# Item繼承Base類
class Item(Base):
    __tablename__ = "items"

    id = Column(Integer, primary_key=True, index=True)
    title = Column(String, index=True)
    description = Column(String, index=True)
    owner_id = Column(Integer, ForeignKey("users.id"))

    owner = relationship("User", back_populates="items")

創(chuàng)建關(guān)系

    items = relationship("Item", back_populates="owner")
  • 當訪問 user 中的屬性items時,如 中my_user.items,它將有一個ItemSQLAlchemy 模型列表(來自items表),這些模型具有指向users表中此記錄的外鍵
  • 當您訪問my_user.items時,SQLAlchemy 實際上會從items表中的獲取一批記錄并在此處填充進去。
  • 同樣,當訪問 Item中的屬性owner時,它將包含表中的-UserSQLAlchemy 模型users。使用owner_id屬性/列及其外鍵來了解要從users表中獲取哪條記錄。

1.4 創(chuàng)建 Pydantic 模型 schemas.py

現(xiàn)在讓我們查看一下文件sql_app/schemas.py。

為了避免 SQLAlchemy模型和 Pydantic模型之間的混淆,我們將有models.py(SQLAlchemy 模型的文件)和schemas.py( Pydantic 模型的文件)。
這些 Pydantic 模型或多或少地定義了一個“schema”(一個有效的數(shù)據(jù)形狀)。
因此,這將幫助我們在使用兩者時避免混淆。
創(chuàng)建初始 Pydantic模型/模式?
創(chuàng)建一個ItemBase和UserBasePydantic模型(或者我們說“schema”)以及在創(chuàng)建或讀取數(shù)據(jù)時具有共同的屬性。

ItemCreate為 創(chuàng)建一個UserCreate繼承自它們的所有屬性(因此它們將具有相同的屬性),以及創(chuàng)建所需的任何其他數(shù)據(jù)(屬性)。

因此在創(chuàng)建時也應(yīng)當有一個password屬性。

但是為了安全起見,password不會出現(xiàn)在其他同類 Pydantic模型中,例如用戶請求時不應(yīng)該從 API 返回響應(yīng)中包含它。

from typing import List, Union

# 1、創(chuàng)建初始 Pydantic模型/模式
from pydantic import BaseModel

# 1、創(chuàng)建初始 Pydantic模型/模式
class ItemBase(BaseModel):
    title: str
    description: Union[str, None] = None

# 1、創(chuàng)建初始 Pydantic模型/模式
class ItemCreate(ItemBase):
    pass

# 2、創(chuàng)建用于讀取/返回的Pydantic模型/模式
class Item(ItemBase):
    id: int
    owner_id: int

    class Config:
        orm_mode = True

# 1、創(chuàng)建初始 Pydantic模型/模式
class UserBase(BaseModel):
    email: str

# 1、創(chuàng)建初始 Pydantic模型/模式
class UserCreate(UserBase):
    password: str

# 2、創(chuàng)建用于讀取/返回的Pydantic模型/模式
class User(UserBase):
    id: int
    is_active: bool
    items: List[Item] = []

    class Config:
        orm_mode = True

請注意,讀取用戶(從 API 返回)時將使用不包括password的User Pydantic模型。

SQLAlchemy 風格和 Pydantic 風格

請注意,SQLAlchemy模型使用 =來定義屬性,并將類型作為參數(shù)傳遞給Column,例如:

name = Column(String)

雖然 Pydantic模型使用: 聲明類型,但新的類型注釋語法/類型提示是:

name: str

請牢記這一點,這樣您在使用:還是=時就不會感到困惑。

1.5 CRUD工具 crud.py

從 sqlalchemy.orm中導(dǎo)入Session,這將允許您聲明db參數(shù)的類型,并在您的函數(shù)中進行更好的類型檢查和完成。

導(dǎo)入之前的models(SQLAlchemy 模型)和schemas(Pydantic模型/模式)。文章來源地址http://www.zghlxwxcb.cn/news/detail-792955.html

from sqlalchemy.orm import Session

from . import models, schemas


def get_user(db: Session, user_id: int):
    return db.query(models.User).filter(models.User.id == user_id).first()

# 通過 ID 和電子郵件查詢單個用戶
def get_user_by_email(db: Session, email: str):
    return db.query(models.User).filter(models.User.email == email).first()

# 查詢多個用戶
def get_users(db: Session, skip: int = 0, limit: int = 100):
    return db.query(models.User).offset(skip).limit(limit).all()

def create_user(db: Session, user: schemas.UserCreate):
    fake_hashed_password = user.password + "notreallyhashed"
    # 使用您的數(shù)據(jù)創(chuàng)建一個 SQLAlchemy 模型實例。
    db_user = models.User(email=user.email, hashed_password=fake_hashed_password)
    # 使用add來將該實例對象添加到您的數(shù)據(jù)庫。
    db.add(db_user)
    # 使用commit來對數(shù)據(jù)庫的事務(wù)提交(以便保存它們)。
    db.commit()
    # 使用refresh來刷新您的數(shù)據(jù)庫實例(以便它包含來自數(shù)據(jù)庫的任何新數(shù)據(jù),例如生成的 ID)。
    db.refresh(db_user)<

到了這里,關(guān)于Python FastAPI 框架 操作Mysql數(shù)據(jù)庫 增刪改查的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【MYSQL數(shù)據(jù)庫的增刪改查操作-超市管理系統(tǒng)】

    【MYSQL數(shù)據(jù)庫的增刪改查操作-超市管理系統(tǒng)】

    MYSQL數(shù)據(jù)庫的增刪改查 創(chuàng)建數(shù)據(jù)庫 選擇數(shù)據(jù)庫 刪除數(shù)據(jù)庫 創(chuàng)建數(shù)據(jù)表 刪除數(shù)據(jù)表 插入數(shù)據(jù) 更新數(shù)據(jù) 查找數(shù)據(jù) 以超市管理系統(tǒng)為例,包含員工表,庫存表,倉庫表 數(shù)據(jù)庫:db_supermarket 數(shù)據(jù)表:s_employee #員工表;s_stock #庫存表;s_storehouse #倉庫表 插入數(shù)據(jù)之后生成表如下:

    2024年02月09日
    瀏覽(31)
  • Python之數(shù)據(jù)庫操作(連接數(shù)據(jù)庫,增刪改查操作,易錯點理解)

    Python之數(shù)據(jù)庫操作(連接數(shù)據(jù)庫,增刪改查操作,易錯點理解)

    文章目錄 前言 一、Python之數(shù)據(jù)庫操作 二、 pymysql 安裝 三、pymysql 包引入 ?連接數(shù)據(jù)庫 創(chuàng)建游標 執(zhí)行sql數(shù)據(jù) - 增刪改查 要獲取查詢結(jié)果數(shù)據(jù) 關(guān)閉游標,關(guān)閉數(shù)據(jù)庫連接 總結(jié) 記錄:Python操作數(shù)據(jù)庫的步驟,不容易理解的地方。 學習地址: python與各大數(shù)據(jù)庫的連接: http:/

    2023年04月16日
    瀏覽(57)
  • 【MySQL】數(shù)據(jù)庫的增刪改查、備份、還原等基本操作

    【MySQL】數(shù)據(jù)庫的增刪改查、備份、還原等基本操作

    大寫的表示 [] 是可選項 CHARACTER SET: 指定數(shù)據(jù)庫采用的字符集 COLLATE: 指定數(shù)據(jù)庫字符集的校驗規(guī)則 創(chuàng)建數(shù)據(jù)庫的時候,有兩個編碼集: 1.數(shù)據(jù)庫編碼集——數(shù)據(jù)庫未來存儲數(shù)據(jù) 2.數(shù)據(jù)庫校驗集——支持數(shù)據(jù)庫進行字段比較使用的編碼,本質(zhì)也是一種讀取數(shù)據(jù)庫中數(shù)據(jù)采

    2024年02月08日
    瀏覽(86)
  • Vue項目通過node連接MySQL數(shù)據(jù)庫并實現(xiàn)增刪改查操作

    Vue項目通過node連接MySQL數(shù)據(jù)庫并實現(xiàn)增刪改查操作

    1.創(chuàng)建Vue項目 Vue項目創(chuàng)建的詳細步驟,有需要的可移步這里 2.下載安裝需要的插件 下載express 下載cors,用于處理接口跨域問題 下載mysql 下載axios 3.在項目中創(chuàng)建server文件夾,用于搭建本地服務(wù)器 新建/server/app.js,用于配置服務(wù)器相關(guān)信息 新建/server/db/index.js,用于配置數(shù)據(jù)庫

    2024年02月16日
    瀏覽(29)
  • Django學習記錄:使用ORM操作MySQL數(shù)據(jù)庫并完成數(shù)據(jù)的增刪改查

    Django學習記錄:使用ORM操作MySQL數(shù)據(jù)庫并完成數(shù)據(jù)的增刪改查

    數(shù)據(jù)庫操作 MySQL數(shù)據(jù)庫+pymysql Django開發(fā)操作數(shù)據(jù)庫更簡單,內(nèi)部提供了ORM框架。 安裝第三方模塊 ORM可以做的事: 1、創(chuàng)建、修改、刪除數(shù)據(jù)庫中的表(不用寫SQL語句)?!緹o法創(chuàng)建數(shù)據(jù)庫】 2、操作表中的數(shù)據(jù)(不用寫SQL語句)。 1、自己創(chuàng)建數(shù)據(jù)庫 1)啟動MySQL服務(wù) 2)自帶

    2024年02月14日
    瀏覽(96)
  • Python對MySQL數(shù)據(jù)庫進行增刪改查

    Python連接MySQL數(shù)據(jù)庫后,可以使用SQL語句對數(shù)據(jù)庫進行增刪改查操作。以下是使用pymysql庫實現(xiàn)Python對MySQL數(shù)據(jù)庫進行增刪改查的示例。 1. 連接MySQL數(shù)據(jù)庫 ```python import pymysql # 打開數(shù)據(jù)庫連接 db = pymysql.connect(host=\\\'localhost\\\', user=\\\'root\\\', password=\\\'password\\\', database=\\\'test_db\\\') # 使用 cursor()

    2024年02月05日
    瀏覽(21)
  • java通過JDBC連接mysql8.0數(shù)據(jù)庫,并對數(shù)據(jù)庫中的表進行增刪改查操作

    java通過JDBC連接mysql8.0數(shù)據(jù)庫,并對數(shù)據(jù)庫中的表進行增刪改查操作

    目錄 一、JDBC簡介 二、添加依賴 三、JDBC操作數(shù)據(jù)庫的步驟 四、JDBC操作數(shù)據(jù)庫——增刪改查 (一)新增數(shù)據(jù) (二)刪除數(shù)據(jù) (三)修改數(shù)據(jù) (四)查詢數(shù)據(jù) (五)多表連接查詢 ????????Java數(shù)據(jù)庫連接,(Java Database Connectivity,簡稱JDBC)是java語言中用來規(guī)范客戶端程序如何來訪問數(shù)

    2024年02月03日
    瀏覽(710)
  • 【Mysql】數(shù)據(jù)庫第四講(表的增刪改查操作 超全面 附實操案例)

    【Mysql】數(shù)據(jù)庫第四講(表的增刪改查操作 超全面 附實操案例)

    語法: 案例: 創(chuàng)建一個學生信息表 單行 多行 語法 案例 表達式不包含字段 表達式包含字段 表達式包含多個字段 比較運算符: 邏輯運算符: AND:多個條件必須都為 TRUE(1),結(jié)果才是 TRUE(1); OR:任意一個條件為 TRUE(1), 結(jié)果為 TRUE(1) NOT:條件為 TRUE(1),結(jié)果為 FALSE(0) 案例1 英語不

    2024年02月07日
    瀏覽(25)
  • Python 操作 MySQL 數(shù)據(jù)庫

    Python 標準數(shù)據(jù)庫接口為 Python DB-API,Python DB-API為開發(fā)人員提供了數(shù)據(jù)庫應(yīng)用編程接口。 Python 數(shù)據(jù)庫接口支持非常多的數(shù)據(jù)庫,你可以選擇適合你項目的數(shù)據(jù)庫: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以訪問Python數(shù)據(jù)庫接口及API查看詳細的支

    2024年02月14日
    瀏覽(19)
  • Python——操作MySQL數(shù)據(jù)庫

    Python——操作MySQL數(shù)據(jù)庫

    ??學習永無止境,記得每天學習新的知識?。?在很多業(yè)務(wù)場景中,我們或多或少都要對數(shù)據(jù)庫上的數(shù)據(jù)進行的一系列操作, 包括讀取數(shù)據(jù)、寫數(shù)據(jù)、更新或修改數(shù)據(jù)、刪除數(shù)據(jù) 等。這些操作可以通過編寫SQL語句來實現(xiàn),也可以通過使用數(shù)據(jù)庫管理系統(tǒng)提供的API接口來實現(xiàn)。

    2024年02月09日
    瀏覽(46)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包