目錄
?專欄導讀?
1?ORM 概述
2?SQLAlchemy 概述
3 ORM:SQLAlchemy使用
?3.1?安裝SQLAlchemy:
3.2 定義數據庫模型類:
3.3 創建數據表:
3.4 插入數據:
?3.5?查詢數據:
3.6 更新數據:
3.7 刪除數據:
3.8??關閉會話:
4? 實戰
??設計一個簡單的圖書管理系統。
?專欄導讀?
專欄訂閱地址:https://blog.csdn.net/qq_35831906/category_12375510.html
1?ORM 概述
????????ORM(對象關系映射)是一種編程技術,用于在關系型數據庫和面向對象編程語言之間建立映射關系,使得數據庫中的表和記錄可以映射到編程語言中的對象和類。ORM的目標是簡化數據庫操作,使開發人員能夠以面向對象的方式處理數據庫。
????????在Python中,有多個ORM庫可用,其中最知名的是SQLAlchemy。SQLAlchemy提供了一種將Python對象與數據庫表之間建立映射關系的方式,允許開發人員使用Python類來操作數據庫。
ORM的優勢包括:
抽象化數據庫操作:ORM隱藏了底層數據庫的細節,開發人員可以更專注于業務邏輯,而不需要編寫復雜的SQL查詢。
面向對象編程:ORM允許開發人員使用面向對象的方式處理數據,使得代碼更加清晰、可維護。
跨數據庫支持:ORM庫通常提供了跨多種數據庫的支持,開發人員可以輕松切換數據庫而不需要更改大量代碼。
自動建表和遷移:ORM庫可以自動根據定義的Python類生成數據庫表,并支持數據庫遷移。
查詢生成器:ORM庫通常提供了查詢生成器,使得編寫查詢更加簡單和直觀。
事務管理:ORM庫可以幫助管理事務,確保數據的一致性和完整性。
2?SQLAlchemy 概述
????????SQLAlchemy是一個強大的Python SQL工具包和對象關系映射(ORM)庫,它允許開發人員使用Python編程語言與關系型數據庫進行交互。SQLAlchemy提供了一種靈活且強大的方式來執行SQL查詢、插入、更新、刪除等操作,同時還支持將數據庫表映射到Python類,使開發人員可以以面向對象的方式操作數據庫。
以下是SQLAlchemy的主要特點和概述:
ORM功能:SQLAlchemy的核心特點之一是其ORM功能。它允許你通過定義Python類來映射數據庫表和記錄,將數據庫操作轉化為面向對象的操作,使代碼更加直觀和易于維護。
多種數據庫支持:SQLAlchemy支持多種關系型數據庫,包括MySQL、SQLite、PostgreSQL、Oracle等,允許開發人員在不同數據庫之間切換而無需更改大部分代碼。
靈活性:SQLAlchemy提供了多種方式來執行SQL操作,包括原始SQL查詢、查詢生成器以及ORM查詢。這使得開發人員可以根據需求選擇適合的方式。
連接池管理:SQLAlchemy支持連接池管理,可以在應用程序和數據庫之間維護一組數據庫連接,提高性能和效率。
事務管理:SQLAlchemy允許你使用事務管理來確保數據庫操作的一致性和完整性,可以提交、回滾和中斷事務。
數據庫遷移:SQLAlchemy提供了Alembic工具,用于數據庫遷移和版本管理,使得對數據庫結構的變更更加可控。
多種關聯:SQLAlchemy支持多種關聯類型,如一對多、多對多等關聯關系,使數據庫之間的關系更加清晰。
跨表查詢:SQLAlchemy允許在ORM查詢中執行跨表聯接,從而實現復雜的查詢操作。
性能優化:SQLAlchemy提供了各種性能優化選項,如緩存、批量操作等,以提升大規模數據處理的效率。
豐富的文檔和社區支持:SQLAlchemy擁有豐富的官方文檔和活躍的社區,使得學習和解決問題變得更加容易。
????????總之,SQLAlchemy是一個強大的Python數據庫工具包,適用于各種規模的項目,從小型應用到大型企業級系統。它的靈活性、面向對象的設計和多種功能使得它成為Python開發人員進行數據庫操作的首選工具之一。
3 ORM:SQLAlchemy使用
????????當使用Python中的ORM(例如SQLAlchemy)時,你可以通過創建Python類來定義數據庫模型,然后使用這些模型對象來執行數據庫操作。以下是使用SQLAlchemy的詳細示例:
3.1?安裝SQLAlchemy:
首先,你需要安裝SQLAlchemy庫。你可以使用以下命令在終端中安裝它:
pip install sqlalchemy
3.2 定義數據庫模型類:
創建一個Python類來定義數據庫模型。每個類表示一個表,類的屬性表示表的列。
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base# 創建數據庫連接
engine = create_engine('sqlite:///example.db')
Base = declarative_base()# 定義模型類
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)age = Column(Integer)
3.3 創建數據表:
通過調用create_all()
方法創建數據庫表。
Base.metadata.create_all(engine)
3.4 插入數據:
創建一個模型對象,然后將其添加到會話中并提交。
from sqlalchemy.orm import sessionmaker# 創建會話
Session = sessionmaker(bind=engine)
session = Session()# 添加數據
new_user = User(name='Alice', age=25)
session.add(new_user)
session.commit()
?3.5?查詢數據:
使用會話查詢模型對象。
# 查詢數據
user = session.query(User).filter_by(name='Alice').first()
if user:print("User found:", user.name, user.age)
else:print("User not found")
3.6 更新數據:
可以更新模型對象的屬性,然后提交會話來更新數據庫。
user.age = 26
session.commit()
3.7 刪除數據:
使用delete()
方法刪除模型對象,然后提交會話。
session.delete(user)
session.commit()
3.8??關閉會話:
記得在完成操作后關閉會話。
session.close()
4? 實戰
??設計一個簡單的圖書管理系統。
以下是一個使用SQLAlchemy的圖書管理系統的完整示例:?
確保已安裝sqlalchemy,? pip install sqlalchemy
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base# 創建數據庫連接
engine = create_engine('sqlite:///library.db')
Base = declarative_base()# 定義作者模型類
class Author(Base):__tablename__ = 'authors'id = Column(Integer, primary_key=True)name = Column(String)# 定義圖書模型類
class Book(Base):__tablename__ = 'books'id = Column(Integer, primary_key=True)title = Column(String)author_id = Column(Integer, ForeignKey('authors.id'))# 創建數據表
Base.metadata.create_all(engine)# 創建會話
Session = sessionmaker(bind=engine)
session = Session()# 添加作者
author1 = Author(name='J.K. Rowling')
author2 = Author(name='George Orwell')session.add_all([author1, author2])
session.commit()# 添加圖書
book1 = Book(title='Harry Potter and the Sorcerer\'s Stone', author_id=author1.id)
book2 = Book(title='1984', author_id=author2.id)session.add_all([book1, book2])
session.commit()# 查詢數據
print("Authors:")
authors = session.query(Author).all()
for author in authors:print("Author:", author.name)selected_author = session.query(Author).filter_by(name='J.K. Rowling').first()
if selected_author:print("\nBooks by", selected_author.name)books = session.query(Book).filter_by(author_id=selected_author.id).all()for book in books:print("Book:", book.title)# 關閉會話
session.close()
上述代碼示例演示了如何使用SQLAlchemy庫創建一個簡單的圖書管理系統。
導入所需模塊:代碼開始時導入了所需的SQLAlchemy模塊,包括創建引擎、定義模型類、創建數據表和會話等。
創建數據庫連接和基類:使用
create_engine
函數創建了SQLite數據庫連接,然后通過declarative_base
創建了一個基類Base
。定義模型類:定義了兩個模型類,即
Author
(作者)和Book
(圖書)。每個類對應一個表,類的屬性對應表的列。創建數據表:通過調用
Base.metadata.create_all(engine)
方法,基于模型類創建了數據庫中的數據表。創建會話:使用
sessionmaker
創建了一個會話類Session
,然后通過Session()
創建了一個會話實例session
。添加數據:創建了兩個作者實例,使用
session.add_all()
將其添加到會話中,并通過session.commit()
提交到數據庫。查詢數據:使用
session.query()
查詢了作者和圖書信息,并進行了打印輸出。關閉會話:在所有操作完成后,通過
session.close()
關閉了會話,釋放資源。總體而言,這個示例展示了如何使用SQLAlchemy來創建數據庫模型、執行數據庫操作、查詢數據以及關閉會話。通過使用ORM,你可以將數據庫操作轉化為面向對象的方式,使代碼更加清晰、可維護。你可以根據需求進一步擴展這個示例,添加更多功能和復雜性。
?