python sqlalchemy模型的建立

SQLAlchemy 是一個功能強大的 Python SQL 工具包和對象關系映射(ORM)庫,用于管理和操作關系數據庫。它為 Python 開發者提供了一種用 Python 對象來運行和管理 SQL 數據庫的方式。

目錄

SQLAlchemy 的兩個核心組成部分

SQLAlchemy 的主要功能

使用 SQLAlchemy 建立模型示例

1、安裝 SQLAlchemy

2、導入所需模塊

3、創建數據庫連接

4、創建基類

5、定義模型

7、創建和使用會話

注意事項

SQLAlchemy 的兩個核心組成部分

  1. SQLAlchemy Core:提供了數據庫的直接訪問,通過構建 SQL 表達式來執行查詢。適合于需要精細控制 SQL的項目。

  2. SQLAlchemy ORM:允許你將 Python 類定義為數據庫表對象,以對象的方式進行數據庫操作。適合于更高層抽象級別的數據處理。

SQLAlchemy 的主要功能

  • 數據庫連接和引擎創建:通過 create_engine() 函數建立到數據庫的連接。
  • 元數據管理:使用 MetaDataTable 定義數據庫結構。
  • SQL 表達式:使用 SQL表達式語言進行復雜查詢。
  • ORM:使用 Python 類和對象操作數據,提高開發效率。
  • 關系映射:支持多對多、一對多及多種復雜關系的映射。
  • 事務管理:通過 Session 管理事務。

使用 SQLAlchemy 建立模型的過程是將數據庫表映射到 Python 類,以便于用面向對象的方法進行數據庫操作。下面是建立一個 SQLAlchemy 模型的基本步驟,包括定義類、設置列和關系等。

使用 SQLAlchemy 建立模型示例

1、安裝 SQLAlchemy

確保安裝 SQLAlchemy 庫:

pip install sqlalchemy
2、導入所需模塊
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
3、創建數據庫連接

使用 create_engine 創建一個數據庫連接。這里以 SQLite 為例:

engine = create_engine('sqlite:///example.db')
4、創建基類

使用 declarative_base 創建一個基類,所有模型類將從這個基類繼承:

Base = declarative_base()
5、定義模型

定義模型類以映射數據庫表和列。例如,我們創建兩個簡單的表:用戶和地址。

class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)address_id = Column(Integer, ForeignKey('addresses.id'))address = relationship("Address", back_populates="user")def __repr__(self):return f"<User(name={self.name}, address_id={self.address_id})>"class Address(Base):__tablename__ = 'addresses'id = Column(Integer, primary_key=True)email_address = Column(String, nullable=False)user = relationship("User", back_populates="address")def __repr__(self):return f"<Address(email_address={self.email_address})>"
  • __tablename__ 指定數據庫表名。
  • Column 定義表中的列類型和屬性。
  • primary_key 用于設置主鍵。
  • ForeignKey 用于建立表間的外鍵關系。
  • relationship 用于定義表間的關系,并幫助 SQLAlchemy 在內存中管理這些關系。

6、創建表

通過 Base.metadata.create_all 將定義的模型映射到數據庫并創建實際的表結構:

Base.metadata.create_all(engine)
7、創建和使用會話
  • 利用 sessionmaker 創建一個用于數據庫操作的會話:
Session = sessionmaker(bind=engine)
session = Session()
  • 使用會話添加和查詢數據:
# 添加記錄
new_address = Address(email_address="alice@example.com")
new_user = User(name="Alice", address=new_address)
session.add(new_user)
session.commit()# 查詢記錄
user = session.query(User).filter_by(name='Alice').first()
print(user)# 關閉會話
session.close()

注意事項

  • 對象關系映射(ORM):通過 SQLAlchemy 的 ORM,可以使用 Python 類和對象與數據庫進行交互,不需要直接編寫 SQL。
  • 對象關系管理relationship 在處理多表關系時非常有用。
  • 事務控制session 用于處理數據庫事務,為保證數據一致性,需注意對會話進行提交或回滾操作。

使用 SQLAlchemy 建立模型可以幫助我們以面向對象的方式管理數據庫,提升代碼的可維護性和可讀性,利用其強大的 ORM功能實現數據層的一個邏輯抽象和業務邏輯分離。
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97952.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rust中使用RocksDB索引進行高效范圍查詢的實踐指南

在當今海量數據處理場景下,高效的范圍查詢能力成為許多系統的關鍵需求。RocksDB作為一款高性能的嵌入式鍵值存儲引擎,其獨特的LSM樹結構和索引設計為范圍查詢提供了底層支持。本文將深入探討如何在Rust中利用RocksDB的特性來實現高效范圍查詢,從鍵的設計原則到迭代器的工程實…

怎么做到這一點:讓 Agent 可以像人類一樣 邊聽邊想、邊說,而不是“等一句話 → 一次性返回”

要實現“邊聽邊想、邊說”&#xff0c;核心是把整條鏈路做成全雙工、分片流式、可中斷的流水線&#xff1a; ASR 連續吐字 →&#xff08;短緩沖&#xff09;→ LLM 連續出 token&#xff08;可搶斷&#xff09;→ TTS 連續合成并播放&#xff08;可打斷/續播&#xff09;。 下…

Ubuntu 22.04 網絡服務安裝配置

Ubuntu 22.04 網絡服務安裝配置 一鍵安裝所有服務 # 更新系統 sudo apt update# 安裝所有服務 sudo apt install -y openssh-server vsftpd telnetd inetutils-inetd ftp telnet# 啟動所有服務 sudo systemctl start ssh vsftpd inetutils-inetd sudo systemctl enable ssh vsf…

【Unity知識分享】Unity實現全局監聽鍵鼠調用

1、實現該功能前&#xff0c;優先學習Unity接入dll調用Window系統接口教程 【Unity知識分享】Unity接入dll調用Window系統接口 2、初始化動態連接庫后&#xff0c;進行腳本功能實現 2.1 創建腳本KeyBoardHook.h和KeyBoardHook.cpp&#xff0c;實現功能如下 KeyBoardHook.h …

深度學習篇---MNIST:手寫數字數據集

下面我將詳細介紹使用 PyTorch 處理 MNIST 手寫數字數據集的完整流程&#xff0c;包括數據加載、模型定義、訓練和評估&#xff0c;并解釋每一行代碼的含義和注意事項。整個流程可以分為五個主要步驟&#xff1a;準備工作、數據加載與預處理、模型定義、模型訓練和模型評估。# …

k8s集群搭建(二)-------- 集群搭建

安裝 containerd 需要在集群內的每個節點上都安裝容器運行時&#xff08;containerd runtime&#xff09;&#xff0c;這個軟件是負責運行容器的軟件。 1. 啟動 ipv4 數據包轉發 # 設置所需的 sysctl 參數&#xff0c;參數在重新啟動后保持不變 cat <<EOF | sudo tee …

【Docker】P1 前言:容器化技術發展之路

目錄容器發展之路物理服務器時代&#xff1a;一機一應用的局限虛擬化時代&#xff1a;突破與局限并存容器化時代&#xff1a;輕量級的革新技術演進的價值體現各位&#xff0c;歡迎來到容器化時代。 容器發展之路 現代業務的核心是應用程序&#xff08;Application&#xff09;…

WPF依賴屬性和依賴屬性的包裝器:

依賴屬性是WPF&#xff08;Windows Presentation Foundation&#xff09;中的一種特殊類型的屬性&#xff0c;特別適用于內存使用優化和屬性值繼承。依賴屬性的定義包括以下幾個步驟&#xff1a; 使用 DependencyProperty.Register 方法注冊依賴屬性。 該方法需要四個參數&…

圖生圖算法

圖生圖算法研究細分&#xff1a;技術演進、應用與爭議 1. 基于GAN的傳統圖生圖方法 定義&#xff1a;利用生成對抗網絡&#xff08;GAN&#xff09;將輸入圖像轉換為目標域圖像&#xff08;如語義圖→照片、草圖→彩圖&#xff09;。關鍵發展與趨勢&#xff1a; Pix2Pix&#…

Go 自建庫的使用教程與測試

附加一個Go庫的實現&#xff0c;相較于Python&#xff0c;Go的實現更較為日常&#xff0c;不需要額外增加setup.py類的文件去額外定義,計算和并發的性能更加。 1. 創建 Go 模塊項目結構 首先創建完整的項目結構&#xff1a; gomathlib/ ├── go.mod ├── go.sum ├── cor…

What is a prototype network in few-shot learning?

A prototype network is a method used in few-shot learning to classify new data points when only a small number of labeled examples (the “shots”) are available per class. It works by creating a representative “prototype” for each class, which is typical…

Linux中用于線程/進程同步的核心函數——`sem_wait`函數

<摘要> sem_wait 是 POSIX 信號量操作函數&#xff0c;用于對信號量執行 P 操作&#xff08;等待、獲取&#xff09;。它的核心功能是原子地將信號量的值減 1。如果信號量的值大于 0&#xff0c;則減 1 并立即返回&#xff1b;如果信號量的值為 0&#xff0c;則調用線程&…

25高教社杯數模國賽【B題超高質量思路+問題分析】

注&#xff1a;本內容由”數模加油站“ 原創出品&#xff0c;雖無償分享&#xff0c;但創作不易。 歡迎參考teach&#xff0c;但請勿抄襲、盜賣或商用。 B 題 碳化硅外延層厚度的確定碳化硅作為一種新興的第三代半導體材料&#xff0c;以其優越的綜合性能表現正在受到越來越多…

【Linux篇章】再續傳輸層協議UDP :從低可靠到極速傳輸的協議重生之路,揭秘無連接通信的二次進化密碼!

&#x1f4cc;本篇摘要&#xff1a; 本篇將承接上次的UDP系列網絡編程&#xff0c;來深入認識下UDP協議的結構&#xff0c;特性&#xff0c;底層原理&#xff0c;注意事項及應用場景&#xff01; &#x1f3e0;歡迎拜訪&#x1f3e0;&#xff1a;點擊進入博主主頁 &#x1f4c…

《A Study of Probabilistic Password Models》(IEEE SP 2014)——論文閱讀

提出更高效的密碼評估工具&#xff0c;將統計語言建模技術引入密碼建模&#xff0c;系統評估各類概率密碼模型性能&#xff0c;打破PCFGw的 “最優模型” 認知。一、研究背景當前研究存在兩大關鍵問題&#xff1a;一是主流的 “猜測數圖” 計算成本極高&#xff0c;且難以覆蓋強…

校園外賣點餐系統(代碼+數據庫+LW)

摘要 隨著校園生活節奏的加快&#xff0c;學生對外賣的需求日益增長。然而&#xff0c;傳統的外賣服務存在諸多不便&#xff0c;如配送時間長、菜品選擇有限、信息更新不及時等。為解決這些問題&#xff0c;本研究開發了一款校園外賣點餐系統&#xff0c;采用前端 Vue、后端 S…

友思特案例 | 食品行業視覺檢測案例集錦(三)

食品制造質量檢測對保障消費者安全和產品質量穩定至關重要&#xff0c;覆蓋原材料至成品全階段&#xff0c;含過程中檢測與成品包裝檢測。近年人工智能深度學習及自動化系統正日益融入食品生產。本篇文章將介紹案例三&#xff1a;友思特Neuro-T深度學習平臺進行面餅質量檢測。在…

SQLynx 3.7 發布:數據庫管理工具的性能與交互雙重進化

目錄 &#x1f511; 核心功能更新 1. 單頁百萬級數據展示 2. 更安全的數據更新與刪除機制 3. 更智能的 SQL 代碼提示 4. 新增物化視圖與外表支持 5. 數據庫搜索與過濾功能重構 ? 總結與思考 在大數據與云原生應用快速發展的今天&#xff0c;數據庫管理工具不僅要“能用…

10G網速不是夢!5G-A如何“榨干”毫米波,跑出比5G快10倍的速度?

5G-A&#xff08;5G-Advanced&#xff09;網絡技術已經在中國福建省廈門市軟件園成功實現萬兆&#xff08;10Gbps&#xff09;速率驗證&#xff0c;標志著我國正式進入5G增強版商用階段。這一突破性成果不僅驗證了5G-A技術的可行性&#xff0c;也為6G網絡的發展奠定了堅實基礎。…

Linux筆記---UDP套接字實戰:簡易聊天室

1. 項目需求分析 我們要設計的是一個簡單的匿名聊天室&#xff0c;用戶的客戶端要求用戶輸入自己的昵稱之后即可在一個公共的群聊當中聊天。 為了簡單起見&#xff0c;我們設計用戶在終端當中與客戶端交互&#xff0c;而在一個文件當中顯式群聊信息&#xff1a; 當用戶輸入的…