SQLAlchemy案例詳解
一、SQLAlchemy介紹
SQLAlchemy 是 Python SQL 工具包和對象關(guān)系映射器,為應(yīng)用程序開發(fā)人員提供 SQL 的全部功能和靈活性。
SQLAlchemy支持SQLite、PostgreSQL、Oracle、MySQL、MariaDB、Microsoft SQL Server等多種數(shù)據(jù)庫。
二、SQLAlchemy安裝

我安裝的版本是:SQLAlchemy==2.0.29。注意SQLAlchemy2.x以上的版本和1.x版本差別還是挺大的,注意版本。
因為SQLAlchemy不能直接操作數(shù)據(jù)庫,還需要python中的pymysql第三方庫,所以還需要安裝pymysql

PyMySQL==1.1.0.
三、創(chuàng)建測試數(shù)據(jù)庫
創(chuàng)建一個用于測試的數(shù)據(jù)庫

其中sqlalchemydb就是測試數(shù)據(jù)庫
四、封裝SQLAlchemyDB類
在python項目根目錄下創(chuàng)建一個sqlalchemy_db.py文件,當(dāng)然你也可以在其他目錄下創(chuàng)建。其中內(nèi)容如下:

說明1:該文件sqlalchemy_db.py的作用是封裝一個SQLAlchemy的類,為實例化sqlAlchemy對象做準(zhǔn)備
說明2:self.engine是連接數(shù)據(jù)的引擎設(shè)置,只有設(shè)置了engine,我們才能通過sqlalchemy對象操作數(shù)據(jù)庫
說明3:self.session可以理解為數(shù)據(jù)庫的操作對象,我們對數(shù)據(jù)庫的操作都是基于該session實現(xiàn)的。
說明4:engine參數(shù)解釋
- 參數(shù)url:SQLAlchemy要連接的數(shù)據(jù)庫地址,其格式為:數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動://數(shù)據(jù)庫用戶:數(shù)據(jù)庫密碼@數(shù)據(jù)庫地址:端口號/數(shù)據(jù)庫名稱?編碼方式
- 參數(shù)convert_unicode:按照指定的編碼方式對字符串進(jìn)行編碼解碼
- 參數(shù)isolation_level:設(shè)置事務(wù)的隔離界別
- 參數(shù)pool_recycle:設(shè)置回收鏈接的時間,單位毫秒
- 參數(shù)pool_pre_ping:每次連接前預(yù)先ping一下
- 參數(shù)pool_size: 鏈接池中保持?jǐn)?shù)據(jù)庫連接的數(shù)量,默認(rèn)是5
- 參數(shù)max_overflow :當(dāng)鏈接池中的連接數(shù)不夠用的時候,允許額外再創(chuàng)建的最大鏈接數(shù)量,默認(rèn)是10
- pool_timeout:排隊等數(shù)據(jù)庫鏈接時的超時時間
說明5:scoped_session創(chuàng)建的session是線程安全的。
五、創(chuàng)建model模型
5.1 SQLAlchemy支持的數(shù)據(jù)類型
- Integer:整形
- String:字符串
- Float:浮點型
- DECIMAL:定點型
- Boolean:bool
- Date:日期類型
- DateTime:日期+時間類型
- Time:時間類型
- Enum:枚舉類型
- Text:文本類型
- LongText:長文本類型
5.2 SQLAlchemy字段常用的約束
- default:默認(rèn)值
- nullable:是否可空
- primary_key:是否為主鍵
- unique:是否唯一
- autoincrement:是否自動增長
- name:該屬性在數(shù)據(jù)庫中的映射字段
5.3 創(chuàng)建測試的model.py文件
在項目的根目錄或者你需要的地方創(chuàng)建一個model.py文件,內(nèi)容如下:

說明1:為了測試效果,我們在這個model類中盡可能的多展示了不同字段的使用
說明2:Base.metadata.create_all() 會將我們的模型自動映射到數(shù)據(jù)庫中,當(dāng)然也可以手動去數(shù)據(jù)庫中創(chuàng)建表
說明3:我們寫好的這個model類暫時還沒有使用呢 。
六、創(chuàng)建測試文件
在項目根目錄下或者你需要的地方創(chuàng)建一個test.py文件,內(nèi)容如下:

這時我們在test.py中就只引入mysql_db和TestModel,其他的先不寫,然后使用python test.py運行該腳本,就會發(fā)現(xiàn)我們的model模型,已經(jīng)同步到數(shù)據(jù)庫中了

七、添加測試數(shù)據(jù)
7.1 單條添加數(shù)據(jù)
修改test.py文件如下,然后python test.py執(zhí)行

執(zhí)行之后,我們?nèi)?shù)據(jù)庫查看結(jié)果如下:

說明1:create_time,update_time,is_delete都是有默認(rèn)值的字段,如果不設(shè)置,會自動顯示默認(rèn)值。
說明2:money字段總長度時9位,但是可以少于9位,不能多于9位,小數(shù)部位不足時補0
7.2 批量添加數(shù)據(jù)
再來演示一下批量增加數(shù)據(jù),代碼如下還是在test.py中

執(zhí)行后的結(jié)果如下:

八、修改刪除
8.1 修改
剛才已經(jīng)演示了增加數(shù)據(jù)的代碼,下面我們看一下修改,代碼如下,還是在test.py文件中

查看一下數(shù)據(jù)庫

8.2 刪除
可以看到姓名和性別已經(jīng)修改成功。再來測試一下刪除數(shù)據(jù)


可以看出,數(shù)據(jù)庫中已經(jīng)沒有id=1的數(shù)據(jù)了
九、查詢
在進(jìn)行查詢測試之前,先往數(shù)據(jù)庫中添加一下測試數(shù)據(jù)

9.1 query關(guān)鍵字
在做查詢的時候我們通常query關(guān)鍵字,它類似于SQL中select 關(guān)鍵字,query參數(shù)通??梢蕴顚懭悈?shù)
- model模型對象:指定查找這個模型中所有的字段
- model模型對象中的屬性:可以指定只查找某個model中的幾個屬性字段
- 聚合函數(shù):func.count(統(tǒng)計行的數(shù)量),func.avg(求平均數(shù)),func.max(求最大值),func.min(求最小值),func.sum(求和)

查看一下打印結(jié)果

說明1:在做查詢的時候 .first() 表示查詢第一個滿足條件的數(shù)據(jù)
說明2:在做查詢的時候 .all() 表示查詢所有數(shù)據(jù)
說明3:如果不是查詢?nèi)孔侄危徊樵儾糠肿侄位蛘呔酆虾瘮?shù)的話,結(jié)果返回的是一個元組,通過下標(biāo)取數(shù)據(jù)即可
9.2 filter關(guān)鍵字
過濾是數(shù)據(jù)提取的一個很重要的功能,以下對一些常用的過濾條件進(jìn)行解釋,并且這些過濾條件都是只能通過filter方法實現(xiàn),常用的方法有
- 相等: ==
- 不相等: !=
- 模糊查詢:like(%xx$)
- 包含:in_()
- 不包含:~ in_() 注意 ~不是直接加在in前面的,注意看代碼示例
- 空:==None 或者 is_(None)
- 不為空: !=None 或者 isnot(None)
- 并且: and_()或者也可以使用逗號連接多個條件
- 或者:or_()

打印結(jié)果如下:

9.3分頁查詢
方式1:使用limit+offset實現(xiàn)

查詢結(jié)果為:

方式2:使用slice

輸出結(jié)果為:

十、排序

輸出結(jié)果為:

侯哥語錄:我曾經(jīng)是一個職業(yè)教育者,現(xiàn)在是一個自由開發(fā)者。我希望我的分享可以和更多人一起進(jìn)步。分享一段我喜歡的話給大家:"我所理解的自由不是想干什么就干什么,而是想不干什么就不干什么。當(dāng)你還沒有能力說不得時候,就努力讓自己變得強大,擁有說不得權(quán)利。"
到此這篇關(guān)于SQLAlchemy詳解的文章就介紹到這了,更多相關(guān)SQLAlchemy詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MSSQL批量插入數(shù)據(jù)優(yōu)化詳細(xì)
這篇文章主要為大家分享一下批量插入數(shù)據(jù)的方法,有時候我們需要插入大量的數(shù)據(jù)那么就需要優(yōu)惠了,要不根本受不了2017-07-07
sql語句中如何將datetime格式的日期轉(zhuǎn)換為yy-mm-dd格式
sql語句中如何將datetime格式的日期轉(zhuǎn)換為yy-mm-dd格式...2007-10-10
SqlServer常用函數(shù)及時間處理小結(jié)
這篇文章主要介紹了SqlServer常用函數(shù)及時間處理小結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
數(shù)據(jù)轉(zhuǎn)換沖突及轉(zhuǎn)換過程中大對象的處理
數(shù)據(jù)轉(zhuǎn)換沖突及轉(zhuǎn)換過程中大對象的處理方法,大家可以參考下。2009-07-07
sqlserver 中一些??吹闹笜?biāo)和清除緩存的方法
sqlserver 中一些常看的指標(biāo)和清除緩存的方法2009-07-07
SQL Server成功與服務(wù)器建立連接但是在登錄過程中發(fā)生錯誤的快速解決方案
這篇文章主要介紹了SQL Server成功與服務(wù)器建立連接但是在登錄過程中發(fā)生錯誤的快速解決方案,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
MyBatis實踐之動態(tài)SQL及關(guān)聯(lián)查詢
MyBatis,大家都知道,半自動的ORM框架,原來叫ibatis,后來好像是10年apache軟件基金組織把它托管給了goole code,就重新命名了MyBatis,功能相對以前更強大了。本文給大家介紹MyBatis實踐之動態(tài)SQL及關(guān)聯(lián)查詢,對mybatis動態(tài)sql相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-03-03

