《SQLAlchemy 2 In Practice》讀后感
一、 為什么讀這本書?
1.平時工作中用的都是 SQLAlchemy 1 的語法,因為 SQLAlchemy 2 發布已經有好長一段時間了,也是未來的趨勢,所以想了解一下SQLAlchemy 2 的語法。
2.個人覺得 SQLAlchemy 的文檔很混亂,經常找不到自己想要的內容,想了解一下其它人是怎么使用文檔的。
基于以上兩個目的,鑒于作者(Miguel Grinberg) 之前寫過一本《Flask Web Development》(中譯版是《Flask Web開發:基于Python的Web應用開發實戰》),個人覺得還行,所以就選擇該書作為了解 SQLAlchemy 2 語法的切入點。
二、這本書寫了什么?
本書總共包含 8 個章節。
第 1 章:Database Setup
介紹如何在項目中使用常見的關系型數據庫,如:SQLite, MySQL, PostgreSQL。
第 2 章:Database Tables
介紹數據庫表的操作,以及常見的 CRUD 操作。個人覺得本章是本書寫得最好的一章,也是最具有實戰意義的一章。查詢操作示例:
SQLAlchemy 1 版本的查詢語句是:
from models import Product
products = Product.query.all()
SQLAlchemy 2 版本的查詢語句是:
from sqlalchemy import select
from models import Product
query = select(Product)
result = session.execute(query)
products = result.scalars().all()
第 3 章: One-To-Many Relationships
介紹一對多關系,平時工作中用的最多。
第 4 章: Many-To-Many Relationships
介紹多對多關系,中規中矩。
第 5 章: Advanced Many-To-Many Relationships
介紹一些高級的多對多關系用法,平時工作中用的相對較少。
第 6 章: A Page Analytics Solution
本章寫得不好,在實際項目中或者復雜的項目中很少這樣使用。
第 7 章:Asynchronous SQLAlchemy
鑒于本人在實際工作中并未這樣實用過,無法判斷其用法是好的還是不好的,本章不評價。
第 8 章: SQLAlchemy and the Web
介紹在 Flask、FastAPI 中集成 SQLAlchemy,寫得不好,在實際項目中或者復雜的項目中很少這樣使用。
從 2025 年 6 月 21 日至 2025 年 7 月 2 日,期間斷斷續續花了 8 天閱讀完《SQLAlchemy 2 In Practice》。
三、這本書特點
1.邏輯結構清晰,行文流暢
雖然這本書是作者自己出版的,但是作者是一個很負責的人,整本書邏輯結構清晰,總共 8 個章節,由易到難,逐漸遞進。行文流暢,讓讀者閱讀起來非常絲滑,基本講明白了“為什么有這個東西,怎么用這個東西”。所以整本書 200 多頁,我只花了 8 天就讀完了。
2.內容簡單
正因為第一個特點——“邏輯結構清晰,行文流暢”,所以其實我個人希望作者能多寫一點,能更深入一點。這可能跟作者對本書的定位有關,可能作者想寫的就是一本入門書。
3.缺乏工程性
以最后一章為例,如果后端使用 Flask, 那么最好是使用 flask-migrate, 不然數據庫遷移就會變成非常麻煩。這也是作者所有的書給我的一種感覺,作者的很多寫法沒有錯,但嚴格來說,充其量只能算作 demo,缺乏工程性,很難應用到大型項目中(或者說在大型項目中這樣的代碼還需要優化)。
四、這本書適合什么樣的人?
在閱讀本書的過程中,解決了我一直以來非常不理解的兩個問題:
1.flask-sqlalchemy 文檔開頭的兩行代碼到底想表達什么?
class Base(DeclarativeBase):
pass
因為之前在 Flask 項目中直接使用的是 Flask-SQLAlchemy, 一直沒看到這兩行代碼的應用,導致我一直不理解這兩行的代碼想表達什么。看完這本書我懂了,其實 Base 就是 Model,在 SQLAlchemy 中 model 必須顯示繼承 DeclarativeBase,至于 Flask-SQLAlchemy 為什么要在開頭加這兩句,不得而知,個人覺得沒有必要。不過這已經不重要了,已經知道 sqlalchemy 的規則就可以了。
2.既然已經提供了 ForeignKey, 為什么還要使用 relationship() 呢?
ForeignKey 作用于數據庫層面, relationship() 作用于 ORM 層面。
回到“為什么讀這本書?”,對于“想了解一下SQLAlchemy 2 的語法”——本書已經解決了我的問題;對于“想了解一下其它人是怎么使用文檔的”——個人還是覺得 SQLAlchemy 文檔的返回和排版做得不好,閱讀的時候,應該牢牢抓住“Content”這個頁面(https://docs.sqlalchemy.org/en/20/contents.html)。
總體而言,本書寫得還行,相對簡潔,屬于入門級教材,適合想對 SQLAlchemy 語法有所了解的初學者。
五、推薦指數
按照 5 星的標準,本書推薦指數 3 顆星。
六、參考資料
1. 編程
(1)豆瓣,Miguel Grinberg,《SQLAlchemy 2 In Practice》:https://book.douban.com/subject/36482906/
(2)源碼,Github:https://github.com/miguelgrinberg/retrofun
2. 英語
(1) Etymology Dictionary:https://www.etymonline.com
(2) Cambridge Dictionary:https://dictionary.cambridge.org

歡迎搜索及關注:編程人(a_codists)
浙公網安備 33010602011771號