SQLAlchemy案例詳解
一、SQLAlchemy介紹
SQLAlchemy 是 Python SQL 工具包和對象關系映射器,為應用程序開發(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文件,當然你也可以在其他目錄下創(chuàng)建。其中內容如下:
說明1:該文件sqlalchemy_db.py的作用是封裝一個SQLAlchemy的類,為實例化sqlAlchemy對象做準備
說明2:self.engine是連接數(shù)據(jù)的引擎設置,只有設置了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ù)庫驅動://數(shù)據(jù)庫用戶:數(shù)據(jù)庫密碼@數(shù)據(jù)庫地址:端口號/數(shù)據(jù)庫名稱?編碼方式
- 參數(shù)convert_unicode:按照指定的編碼方式對字符串進行編碼解碼
- 參數(shù)isolation_level:設置事務的隔離界別
- 參數(shù)pool_recycle:設置回收鏈接的時間,單位毫秒
- 參數(shù)pool_pre_ping:每次連接前預先ping一下
- 參數(shù)pool_size: 鏈接池中保持數(shù)據(jù)庫連接的數(shù)量,默認是5
- 參數(shù)max_overflow :當鏈接池中的連接數(shù)不夠用的時候,允許額外再創(chuàng)建的最大鏈接數(shù)量,默認是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:默認值
- nullable:是否可空
- primary_key:是否為主鍵
- unique:是否唯一
- autoincrement:是否自動增長
- name:該屬性在數(shù)據(jù)庫中的映射字段
5.3 創(chuàng)建測試的model.py文件
在項目的根目錄或者你需要的地方創(chuàng)建一個model.py文件,內容如下:
說明1:為了測試效果,我們在這個model類中盡可能的多展示了不同字段的使用
說明2:Base.metadata.create_all() 會將我們的模型自動映射到數(shù)據(jù)庫中,當然也可以手動去數(shù)據(jù)庫中創(chuàng)建表
說明3:我們寫好的這個model類暫時還沒有使用呢 。
六、創(chuàng)建測試文件
在項目根目錄下或者你需要的地方創(chuàng)建一個test.py文件,內容如下:
這時我們在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í)行之后,我們去數(shù)據(jù)庫查看結果如下:
說明1:create_time,update_time,is_delete都是有默認值的字段,如果不設置,會自動顯示默認值。
說明2:money字段總長度時9位,但是可以少于9位,不能多于9位,小數(shù)部位不足時補0
7.2 批量添加數(shù)據(jù)
再來演示一下批量增加數(shù)據(jù),代碼如下還是在test.py中
執(zhí)行后的結果如下:
八、修改刪除
8.1 修改
剛才已經(jīng)演示了增加數(shù)據(jù)的代碼,下面我們看一下修改,代碼如下,還是在test.py文件中
查看一下數(shù)據(jù)庫
8.2 刪除
可以看到姓名和性別已經(jīng)修改成功。再來測試一下刪除數(shù)據(jù)
可以看出,數(shù)據(jù)庫中已經(jīng)沒有id=1的數(shù)據(jù)了
九、查詢
在進行查詢測試之前,先往數(shù)據(jù)庫中添加一下測試數(shù)據(jù)
9.1 query關鍵字
在做查詢的時候我們通常query關鍵字,它類似于SQL中select 關鍵字,query參數(shù)通??梢蕴顚懭悈?shù)
- model模型對象:指定查找這個模型中所有的字段
- model模型對象中的屬性:可以指定只查找某個model中的幾個屬性字段
- 聚合函數(shù):func.count(統(tǒng)計行的數(shù)量),func.avg(求平均數(shù)),func.max(求最大值),func.min(求最小值),func.sum(求和)
查看一下打印結果
說明1:在做查詢的時候 .first() 表示查詢第一個滿足條件的數(shù)據(jù)
說明2:在做查詢的時候 .all() 表示查詢所有數(shù)據(jù)
說明3:如果不是查詢全部字段,只查詢部分字段或者聚合函數(shù)的話,結果返回的是一個元組,通過下標取數(shù)據(jù)即可
9.2 filter關鍵字
過濾是數(shù)據(jù)提取的一個很重要的功能,以下對一些常用的過濾條件進行解釋,并且這些過濾條件都是只能通過filter方法實現(xiàn),常用的方法有
- 相等: ==
- 不相等: !=
- 模糊查詢:like(%xx$)
- 包含:in_()
- 不包含:~ in_() 注意 ~不是直接加在in前面的,注意看代碼示例
- 空:==None 或者 is_(None)
- 不為空: !=None 或者 isnot(None)
- 并且: and_()或者也可以使用逗號連接多個條件
- 或者:or_()
打印結果如下:
9.3分頁查詢
方式1:使用limit+offset實現(xiàn)
查詢結果為:
方式2:使用slice
輸出結果為:
十、排序
輸出結果為:
侯哥語錄:我曾經(jīng)是一個職業(yè)教育者,現(xiàn)在是一個自由開發(fā)者。我希望我的分享可以和更多人一起進步。分享一段我喜歡的話給大家:"我所理解的自由不是想干什么就干什么,而是想不干什么就不干什么。當你還沒有能力說不得時候,就努力讓自己變得強大,擁有說不得權利。"
到此這篇關于SQLAlchemy詳解的文章就介紹到這了,更多相關SQLAlchemy詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
sql語句中如何將datetime格式的日期轉換為yy-mm-dd格式
sql語句中如何將datetime格式的日期轉換為yy-mm-dd格式...2007-10-10sqlserver 中一些??吹闹笜撕颓宄彺娴姆椒?/a>
sqlserver 中一些??吹闹笜撕颓宄彺娴姆椒?/div> 2009-07-07SQL Server成功與服務器建立連接但是在登錄過程中發(fā)生錯誤的快速解決方案
這篇文章主要介紹了SQL Server成功與服務器建立連接但是在登錄過程中發(fā)生錯誤的快速解決方案,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09MyBatis實踐之動態(tài)SQL及關聯(lián)查詢
MyBatis,大家都知道,半自動的ORM框架,原來叫ibatis,后來好像是10年apache軟件基金組織把它托管給了goole code,就重新命名了MyBatis,功能相對以前更強大了。本文給大家介紹MyBatis實踐之動態(tài)SQL及關聯(lián)查詢,對mybatis動態(tài)sql相關知識感興趣的朋友一起學習吧2016-03-03最新評論