SQLAlchemy的主要組件詳細(xì)講解
SQLAlchemy介紹
SQLAlchemy是一個基于Python實現(xiàn)的ORM框架,能滿足大多數(shù)數(shù)據(jù)庫操作需求,同時支持多種數(shù)據(jù)庫引擎(SQLite,MySQL,Postgresql,Oracle等)
SQLAlchemy組件中最有名的是它的對象關(guān)系映射器(ORM)
ORM 將數(shù)據(jù)庫中的表與面向?qū)ο笳Z言中的類建立了一種對應(yīng)關(guān)系
ORM將一個Python的對象映射為數(shù)據(jù)庫中的一張關(guān)系表。它將SQL封裝起來,程序員不再需要關(guān)心數(shù)據(jù)庫的具體操作,只需要專注于自己本身代碼和業(yè)務(wù)邏輯的實現(xiàn)
對數(shù)據(jù)表的抽象,允許開發(fā)人員首先考慮數(shù)據(jù)模型,同時使得Python程序更加簡潔易讀。
對各種數(shù)據(jù)庫引擎的封裝,使得開發(fā)人員在面對不同數(shù)據(jù)庫時,只需要做簡單修改即可,工作量大大減少。
整體的實現(xiàn)過程就是:Python代碼,通過ORM轉(zhuǎn)換成SQL語句,再通過pymysql去實際操作數(shù)據(jù)庫,最典型的ORM就是我們的SQLAlchemy
SQLAlchemy的主要組件有哪些?
SQLAlchemy,聽名字就知道是個把SQL用魔法驅(qū)動的庫。它有很多組件,讓我一個個給你揭曉。首先,它的核心是Engine,相當(dāng)于一個數(shù)據(jù)庫的驅(qū)動程序,負(fù)責(zé)和數(shù)據(jù)庫進(jìn)行交流。比如你想從數(shù)據(jù)庫讀取數(shù)據(jù),你只需要告訴Engine你要什么,Engine就會幫你搞到手。
例如,你想要從名為“users”的表讀取所有數(shù)據(jù),代碼可能是這樣的:
from sqlalchemy import create_engine # 創(chuàng)建一個引擎 engine = create_engine('sqlite:///example.db') # 打開一個數(shù)據(jù)庫連接 with engine.connect() as connection: # 創(chuàng)建一個查詢,這里我們查詢 "users" 表中的所有數(shù)據(jù) query = connection.query(users) # 執(zhí)行查詢并打印結(jié)果 for user in query: print(user)
但是,SQLAlchemy更強大的地方在于,它可以把復(fù)雜的SQL查詢用Python的方式寫出來。比如,你想要查詢“users”表中年齡大于18歲的女性用戶,你可以像這樣寫:
from sqlalchemy import create_engine, Column, Integer, String, func from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base # 創(chuàng)建ORM對象的基礎(chǔ) Base = declarative_base() # 定義一個User對象 class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) gender = Column(String) # 創(chuàng)建一個引擎 engine = create_engine('sqlite:///example.db') # 創(chuàng)建Session類 Session = sessionmaker(bind=engine) # 創(chuàng)建一個新的Session對象 session = Session() # 查詢所有年齡大于18歲的女性用戶 for user in session.query(User).filter(User.age > 18, User.gender == 'female'): print(user.id, user.name, user.age, user.gender)
是不是很酷?不過要注意,上面的代碼需要先建立一個數(shù)據(jù)庫和相應(yīng)的表。你可以用SQLAlchemy的DDL(數(shù)據(jù)庫定義語言)來創(chuàng)建表。比如:
from sqlalchemy.sql import table, column users = table('users', column('id', Integer), column('name', String), column('age', Integer), column('gender', String), )
然后可以用SQLAlchemy的DDL對象的create方法來創(chuàng)建表:
from sqlalchemy import create_engine engine = create_engine('sqlite:///example.db') with engine.connect() as connection: connection.execute(users.create)
SQLAlchemy還有許多其他組件,比如SQL表達(dá)式語言、ORM、Schema、Type System等等,這些都是SQLAlchemy提供的功能。但這些功能并不是每個人都需要用到的。你可能需要的是它的核心——Engine。如果你想要更進(jìn)一步,可以試試它的SQL表達(dá)式語言和ORM。如果你是一個數(shù)據(jù)庫研究員,你可能需要的是它的Schema和Type System??傊?,SQLAlchemy是一個非常強大的庫,幾乎可以處理所有和SQL有關(guān)的任務(wù)。
除了上面提到的組件,SQLAlchemy還提供了許多其他的功能和工具,下面簡單列舉一些:
事務(wù)處理:SQLAlchemy提供了事務(wù)處理的功能,可以方便地進(jìn)行數(shù)據(jù)庫事務(wù)的操作和管理。
連接池:SQLAlchemy支持多種數(shù)據(jù)庫連接池,可以有效地管理數(shù)據(jù)庫連接,提高數(shù)據(jù)庫的性能和可靠性。
SQL遷移:SQLAlchemy提供了SQL遷移工具,可以方便地進(jìn)行數(shù)據(jù)庫表的遷移和版本控制。
查詢構(gòu)建器:SQLAlchemy提供了查詢構(gòu)建器,可以用Python語言的方式構(gòu)建SQL查詢,更加靈活和方便。
ORM映射器:SQLAlchemy的ORM組件提供了映射器,可以將Python對象映射到數(shù)據(jù)庫中的表,實現(xiàn)對象關(guān)系映射(ORM)的功能。
事件系統(tǒng):SQLAlchemy提供了事件系統(tǒng),可以方便地對數(shù)據(jù)庫操作進(jìn)行監(jiān)控和分析,實現(xiàn)自定義的邏輯和功能。
下面舉幾個例子來說明SQLAlchemy的用法:
查詢數(shù)據(jù)庫:
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base # 創(chuàng)建引擎和會話 engine = create_engine('sqlite:///example.db') Session = sessionmaker(bind=engine) session = Session() # 查詢所有用戶信息 users = session.query(User).all() for user in users: print(user.id, user.name, user.age)
條件查詢:
from sqlalchemy import create_engine, func from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base # 創(chuàng)建引擎和會話 engine = create_engine('sqlite:///example.db') Session = sessionmaker(bind=engine) session = Session() # 查詢年齡大于18歲的女性用戶信息 female_users = session.query(User).filter(User.gender == 'female', User.age > 18).all() for user in female_users: print(user.id, user.name, user.age)
到此這篇關(guān)于SQLAlchemy的主要組件有哪些?的文章就介紹到這了,更多相關(guān)SQLAlchemy組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案
這篇文章主要介紹了pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05PyQt5中QCommandLinkButton的詳細(xì)教程與應(yīng)用實戰(zhàn)
在PyQt5中,QCommandLinkButton是一個特殊的按鈕控件,它最初在Windows Vista中引入,并因其獨特的外觀和功能在GUI應(yīng)用程序中得到了廣泛應(yīng)用,本教程將結(jié)合實際案例,詳細(xì)介紹QCommandLinkButton在PyQt5中的用法,需要的朋友可以參考下2024-07-07解決Python import .pyd 可能遇到路徑的問題
這篇文章主要介紹了解決Python import .pyd 可能遇到路徑的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03淺談python 調(diào)用open()打開文件時路徑出錯的原因
這篇文章主要介紹了淺談python 調(diào)用open()打開文件時路徑出錯的原因,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python通過colorama模塊在控制臺輸出彩色文字的方法
這篇文章主要介紹了python通過colorama模塊在控制臺輸出彩色文字的方法,實例分析了colorama模塊的功能及相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03Python+OpenCV手勢檢測與識別Mediapipe基礎(chǔ)篇
網(wǎng)上搜到了一些關(guān)于手勢處理的實驗,我在這兒簡單的實現(xiàn)一下,下面這篇文章主要給大家介紹了關(guān)于Python+OpenCV手勢檢測與識別Mediapipe基礎(chǔ)篇的相關(guān)資料,需要的朋友可以參考下2022-12-12