亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SQLAlchemy案例詳解

 更新時(shí)間:2024年04月07日 09:28:59   作者:Se7eN_HOU  
SQLAlchemy?是?Python?SQL?工具包和對(duì)象關(guān)系映射器,為應(yīng)用程序開(kāi)發(fā)人員提供SQL的全部功能和靈活性,這篇文章主要介紹了SQLAlchemy詳解,需要的朋友可以參考下

一、SQLAlchemy介紹

  SQLAlchemy 是 Python SQL 工具包和對(duì)象關(guān)系映射器,為應(yīng)用程序開(kāi)發(fā)人員提供 SQL 的全部功能和靈活性。

  SQLAlchemy支持SQLite、PostgreSQL、Oracle、MySQL、MariaDB、Microsoft SQL Server等多種數(shù)據(jù)庫(kù)。

二、SQLAlchemy安裝

  我安裝的版本是:SQLAlchemy==2.0.29。注意SQLAlchemy2.x以上的版本和1.x版本差別還是挺大的,注意版本。

  因?yàn)镾QLAlchemy不能直接操作數(shù)據(jù)庫(kù),還需要python中的pymysql第三方庫(kù),所以還需要安裝pymysql

  PyMySQL==1.1.0.

三、創(chuàng)建測(cè)試數(shù)據(jù)庫(kù)

  創(chuàng)建一個(gè)用于測(cè)試的數(shù)據(jù)庫(kù)

  其中sqlalchemydb就是測(cè)試數(shù)據(jù)庫(kù)

四、封裝SQLAlchemyDB類(lèi)

  在python項(xiàng)目根目錄下創(chuàng)建一個(gè)sqlalchemy_db.py文件,當(dāng)然你也可以在其他目錄下創(chuàng)建。其中內(nèi)容如下:

  說(shuō)明1:該文件sqlalchemy_db.py的作用是封裝一個(gè)SQLAlchemy的類(lèi),為實(shí)例化sqlAlchemy對(duì)象做準(zhǔn)備

  說(shuō)明2:self.engine是連接數(shù)據(jù)的引擎設(shè)置,只有設(shè)置了engine,我們才能通過(guò)sqlalchemy對(duì)象操作數(shù)據(jù)庫(kù)

  說(shuō)明3:self.session可以理解為數(shù)據(jù)庫(kù)的操作對(duì)象,我們對(duì)數(shù)據(jù)庫(kù)的操作都是基于該session實(shí)現(xiàn)的。

  說(shuō)明4:engine參數(shù)解釋

  • 參數(shù)url:SQLAlchemy要連接的數(shù)據(jù)庫(kù)地址,其格式為:數(shù)據(jù)庫(kù)類(lèi)型+數(shù)據(jù)庫(kù)驅(qū)動(dòng)://數(shù)據(jù)庫(kù)用戶(hù):數(shù)據(jù)庫(kù)密碼@數(shù)據(jù)庫(kù)地址:端口號(hào)/數(shù)據(jù)庫(kù)名稱(chēng)?編碼方式
  • 參數(shù)convert_unicode:按照指定的編碼方式對(duì)字符串進(jìn)行編碼解碼
  • 參數(shù)isolation_level:設(shè)置事務(wù)的隔離界別
  • 參數(shù)pool_recycle:設(shè)置回收鏈接的時(shí)間,單位毫秒
  • 參數(shù)pool_pre_ping:每次連接前預(yù)先ping一下
  • 參數(shù)pool_size: 鏈接池中保持?jǐn)?shù)據(jù)庫(kù)連接的數(shù)量,默認(rèn)是5
  • 參數(shù)max_overflow :當(dāng)鏈接池中的連接數(shù)不夠用的時(shí)候,允許額外再創(chuàng)建的最大鏈接數(shù)量,默認(rèn)是10
  • pool_timeout:排隊(duì)等數(shù)據(jù)庫(kù)鏈接時(shí)的超時(shí)時(shí)間

說(shuō)明5:scoped_session創(chuàng)建的session是線程安全的。

五、創(chuàng)建model模型  

5.1 SQLAlchemy支持的數(shù)據(jù)類(lèi)型

  • Integer:整形
  • String:字符串
  • Float:浮點(diǎn)型
  • DECIMAL:定點(diǎn)型
  • Boolean:bool
  • Date:日期類(lèi)型
  • DateTime:日期+時(shí)間類(lèi)型
  • Time:時(shí)間類(lèi)型
  • Enum:枚舉類(lèi)型
  • Text:文本類(lèi)型
  • LongText:長(zhǎng)文本類(lèi)型

5.2 SQLAlchemy字段常用的約束

  • default:默認(rèn)值
  • nullable:是否可空
  • primary_key:是否為主鍵
  • unique:是否唯一
  • autoincrement:是否自動(dòng)增長(zhǎng)
  • name:該屬性在數(shù)據(jù)庫(kù)中的映射字段

5.3 創(chuàng)建測(cè)試的model.py文件

    在項(xiàng)目的根目錄或者你需要的地方創(chuàng)建一個(gè)model.py文件,內(nèi)容如下:

    說(shuō)明1:為了測(cè)試效果,我們?cè)谶@個(gè)model類(lèi)中盡可能的多展示了不同字段的使用

    說(shuō)明2:Base.metadata.create_all() 會(huì)將我們的模型自動(dòng)映射到數(shù)據(jù)庫(kù)中,當(dāng)然也可以手動(dòng)去數(shù)據(jù)庫(kù)中創(chuàng)建表

    說(shuō)明3:我們寫(xiě)好的這個(gè)model類(lèi)暫時(shí)還沒(méi)有使用呢 。

六、創(chuàng)建測(cè)試文件

  在項(xiàng)目根目錄下或者你需要的地方創(chuàng)建一個(gè)test.py文件,內(nèi)容如下:

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

七、添加測(cè)試數(shù)據(jù)  

7.1 單條添加數(shù)據(jù)

    修改test.py文件如下,然后python test.py執(zhí)行

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

    說(shuō)明1:create_time,update_time,is_delete都是有默認(rèn)值的字段,如果不設(shè)置,會(huì)自動(dòng)顯示默認(rèn)值。

    說(shuō)明2:money字段總長(zhǎng)度時(shí)9位,但是可以少于9位,不能多于9位,小數(shù)部位不足時(shí)補(bǔ)0

7.2 批量添加數(shù)據(jù)

    再來(lái)演示一下批量增加數(shù)據(jù),代碼如下還是在test.py中

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

八、修改刪除

8.1 修改

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

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

8.2 刪除

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

    可以看出,數(shù)據(jù)庫(kù)中已經(jīng)沒(méi)有id=1的數(shù)據(jù)了

九、查詢(xún)

  在進(jìn)行查詢(xún)測(cè)試之前,先往數(shù)據(jù)庫(kù)中添加一下測(cè)試數(shù)據(jù)

9.1 query關(guān)鍵字

    在做查詢(xún)的時(shí)候我們通常query關(guān)鍵字,它類(lèi)似于SQL中select 關(guān)鍵字,query參數(shù)通常可以填寫(xiě)三類(lèi)參數(shù)

  • model模型對(duì)象:指定查找這個(gè)模型中所有的字段
  • model模型對(duì)象中的屬性:可以指定只查找某個(gè)model中的幾個(gè)屬性字段
  • 聚合函數(shù):func.count(統(tǒng)計(jì)行的數(shù)量),func.avg(求平均數(shù)),func.max(求最大值),func.min(求最小值),func.sum(求和)

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

    說(shuō)明1:在做查詢(xún)的時(shí)候 .first() 表示查詢(xún)第一個(gè)滿(mǎn)足條件的數(shù)據(jù)

    說(shuō)明2:在做查詢(xún)的時(shí)候 .all() 表示查詢(xún)所有數(shù)據(jù)

    說(shuō)明3:如果不是查詢(xún)?nèi)孔侄?,只查?xún)部分字段或者聚合函數(shù)的話,結(jié)果返回的是一個(gè)元組,通過(guò)下標(biāo)取數(shù)據(jù)即可

9.2 filter關(guān)鍵字

    過(guò)濾是數(shù)據(jù)提取的一個(gè)很重要的功能,以下對(duì)一些常用的過(guò)濾條件進(jìn)行解釋?zhuān)⑶疫@些過(guò)濾條件都是只能通過(guò)filter方法實(shí)現(xiàn),常用的方法有

  • 相等: ==
  • 不相等: !=
  • 模糊查詢(xún):like(%xx$)
  • 包含:in_()
  • 不包含:~ in_() 注意 ~不是直接加在in前面的,注意看代碼示例
  • 空:==None 或者 is_(None)
  • 不為空: !=None 或者 isnot(None)
  • 并且: and_()或者也可以使用逗號(hào)連接多個(gè)條件
  • 或者:or_()

    打印結(jié)果如下:

9.3分頁(yè)查詢(xún)

    方式1:使用limit+offset實(shí)現(xiàn)

    查詢(xún)結(jié)果為:

    方式2:使用slice

    輸出結(jié)果為:

十、排序

  輸出結(jié)果為:

侯哥語(yǔ)錄:我曾經(jīng)是一個(gè)職業(yè)教育者,現(xiàn)在是一個(gè)自由開(kāi)發(fā)者。我希望我的分享可以和更多人一起進(jìn)步。分享一段我喜歡的話給大家:"我所理解的自由不是想干什么就干什么,而是想不干什么就不干什么。當(dāng)你還沒(méi)有能力說(shuō)不得時(shí)候,就努力讓自己變得強(qiáng)大,擁有說(shuō)不得權(quán)利。"

到此這篇關(guān)于SQLAlchemy詳解的文章就介紹到這了,更多相關(guān)SQLAlchemy詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論