SQLAlchemy 是一個功能強大的 Python SQL 工具包和對象關系映射(ORM)庫,用于管理和操作關系數據庫。它為 Python 開發者提供了一種用 Python 對象來運行和管理 SQL 數據庫的方式。
目錄
SQLAlchemy 的兩個核心組成部分
SQLAlchemy 的主要功能
使用 SQLAlchemy 建立模型示例
1、安裝 SQLAlchemy
2、導入所需模塊
3、創建數據庫連接
4、創建基類
5、定義模型
7、創建和使用會話
注意事項
SQLAlchemy 的兩個核心組成部分
-
SQLAlchemy Core:提供了數據庫的直接訪問,通過構建 SQL 表達式來執行查詢。適合于需要精細控制 SQL的項目。
-
SQLAlchemy ORM:允許你將 Python 類定義為數據庫表對象,以對象的方式進行數據庫操作。適合于更高層抽象級別的數據處理。
SQLAlchemy 的主要功能
- 數據庫連接和引擎創建:通過
create_engine()
函數建立到數據庫的連接。 - 元數據管理:使用
MetaData
和Table
定義數據庫結構。 - 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功能實現數據層的一個邏輯抽象和業務邏輯分離。
?