一、SQLAlchemy簡介
1、SQLAlchemy是什麼
SQLAlchemy是一個Python SQL工具包,它包括ORM(對象關係映射)和Core兩部分,可以與多種關係數據庫進行交互。ORM是將關係數據庫中的數據轉換為Python對象,使得Python開發人員可以使用對象來代替SQL語句來操縱數據庫,它通過映射(mapping)類(class)到數據庫中的表格(table),從而實現了對數據庫中數據的操作。
Core則是更加低階的SQL編程工具,主要負責處理表、字段、數據庫會話等基本的SQL構建功能,對於熟練掌握SQL的開發人員來說更加友好。
2、SQLAlchemy的優勢
相比於其他的Python SQL工具包,SQLAlchemy的優勢主要體現在以下幾個方面:
1) 易於學習:SQLAlchemy採用面向對象設計,使用Python的類和對象來進行數據庫操作,這種方式與Python程序員的編程習慣非常接近,因此SQLAlchemy的學習曲線非常平緩。
2) 良好的ORM支持:SQLAlchemy的ORM實現非常靈活和強大,可以支持複雜的數據關係映射,它不僅僅是數據的映射關係,還可以提供事務管理、連接池管理、緩存管理等一系列高級功能,大大簡化了數據操作的開發難度。
3) 支持多種數據庫: SQLAlchemy 不僅可以支持使用 Python 對數據庫進行操作,更為重要的是它支持了多個數據庫的操作,包括了 MySQL、PostgreSQL、SQLite 等主流的數據庫。
二、SQLAlchemy的ORM映射機制
1、映射類(mapping class)的定義
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
以上代碼定義了一個名為User的映射類,把這個類和數據庫中的表users進行了映射。在User類中,id、name和age都是該表中的列,它們被定義為Column對象。其中,id作為唯一的主鍵,被定義為primary_key=True。
2、數據庫操作基本步驟
在使用SQLAlchemy實現ORM映射時,通過Session進行與數據庫的交互,其基本使用步驟如下:
1)創建engine:engine是最基本的SQLAlchemy對象,它負責實際的數據庫交互,也是Session的工廠,每個engine通常與一個特定的數據庫進行交互。
2)定義映射類:定義映射類並與engine進行綁定,engine可以了解到數據庫的相關信息。
3)創建Session:使用sessionmaker類創建session,session負責處理與數據庫的所有交互。使用session進行CRUD操作時,ORM會自動將用戶操作轉化為SQL語句,然後執行這些SQL語句。
4)使用session進行CRUD操作。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# 連接數據庫
engine = create_engine('mysql+pymysql://username:password@host:port/dbname')
# 創建session
Session = sessionmaker(bind=engine)
session = Session()
# CRUD操作
user = User(name='小明', age=20)
session.add(user) # 添加記錄
session.commit()
result = session.query(User).filter_by(name='小明').first() # 查詢記錄
result.age = 21 # 更新記錄
session.delete(result) # 刪除記錄
session.commit()
session.close() # 關閉session
三、SQLAlchemy的Core使用
1、基本操作
SQLAlchemy的core是一個輕量級的SQL封裝庫,它可以讓我們使用SQL語句來操作數據庫。下面是一個簡單的例子,使用SELECT語句從數據庫中查詢一條記錄:
from sqlalchemy import create_engine, text
engine = create_engine('mysql+pymysql://username:password@host:port/dbname')
with engine.connect() as conn: # 獲取連接
result = conn.execute(text("SELECT * FROM users WHERE name=:name"), name='小明') # 執行SQL
print(result.fetchone())
2、事務控制
在SQLAlchemy的Core中,事務管理需要手動控制。如果需要進行事務管理,可以使用connection對象上的begin、commit、rollback 方法。
from sqlalchemy import create_engine, text
engine = create_engine('mysql+pymysql://username:password@host:port/dbname')
with engine.connect() as conn:
trans = conn.begin() # 開始事務
try:
conn.execute(text("UPDATE users SET age=:age WHERE name=:name"), name='小明', age=21)
conn.execute(text("UPDATE users SET age=:age WHERE name=:name"), name='小紅', age=22)
trans.commit() # 提交事務
except:
trans.rollback() # 回滾事務
raise
四、SQLAlchemy的高級特性
1、連接池管理
在並發訪問時,頻繁地建立和斷開數據庫連接是一項非常耗費資源的操作,會嚴重影響應用程序性能。SQLAlchemy提供了連接池技術,可以有效地減輕打開和關閉數據庫連接的負擔,從而提高應用的並發訪問能力。
2、緩存管理
在讀-heavy的應用中,使用緩存可以很好的提高性能。SQLAlchemy也支持緩存,可以將執行過的SQL語句的查詢結果緩存起來,以便後續的查詢能夠快速地返回結果。
3、表單映射
SQLAlchemy支持生成Web表單,可以將SQLAlchemy映射的對象快速轉換為HTML表單。這樣,可以在不編寫任何HTML代碼的情況下,快速地生成表單頁面。
五、總結
本文簡要介紹了SQLAlchemy的基本功能和高級特性,包括ORM和Core的使用、事務控制、連接池管理、緩存管理以及表單映射等方面。SQLAlchemy是一個功能強大的Python SQL工具包,提供了靈活的ORM實現和強大的Core功能,符合Python編程的習慣,易於學習和使用。
在實際開發中,開發人員可以結合實際業務需求選擇相應的SQLAlchemy功能,從而實現快速、高效、可靠的數據庫操作。
原創文章,作者:AMTDG,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/325250.html