最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python簡(jiǎn)潔強(qiáng)大的ORM框架Peewee的用法詳解

 更新時(shí)間:2025年01月16日 08:22:53   作者:wang_yb  
這篇文章主要為大家詳細(xì)介紹了Peewee,它作為一款簡(jiǎn)潔且功能強(qiáng)大的?ORM(對(duì)象關(guān)系映射)框架,為開(kāi)發(fā)者提供了高效便捷的數(shù)據(jù)庫(kù)交互方式,下面我們來(lái)看看它的具體使用吧

在 Python 的開(kāi)發(fā)世界中,數(shù)據(jù)庫(kù)操作是至關(guān)重要的一環(huán)。

今天介紹的 Peewee 作為一款簡(jiǎn)潔且功能強(qiáng)大的 ORM(對(duì)象關(guān)系映射)框架,為開(kāi)發(fā)者提供了高效便捷的數(shù)據(jù)庫(kù)交互方式。

1. Peewee概述

Peewee 是一個(gè)簡(jiǎn)單小巧的 ORM,它的概念簡(jiǎn)潔明了,易于學(xué)習(xí)和使用。

能夠與 SQLiteMySQL、MariaDB、PostgreSQL 等多種數(shù)據(jù)庫(kù)協(xié)同工作,擁有豐富的擴(kuò)展功能,其源代碼托管于 GitHub-peewee。

使用過(guò)Python的都知道,SQLAlchemy幾乎已經(jīng)是Python中的標(biāo)準(zhǔn)ORM框架了,功能強(qiáng)大,

為什么還要使用Peewee呢?

首先,Peewee 設(shè)計(jì)更為簡(jiǎn)潔,其 API 簡(jiǎn)單直觀,學(xué)習(xí)曲線平緩,新手能快速上手,而 SQLAlchemy 相對(duì)復(fù)雜,需要花費(fèi)更多時(shí)間去掌握。

其次,Peewee 代碼量較少,在一些簡(jiǎn)單項(xiàng)目中,其輕量級(jí)的特點(diǎn)能使項(xiàng)目結(jié)構(gòu)更清晰,開(kāi)發(fā)效率更高。

例如在小型數(shù)據(jù)庫(kù)應(yīng)用場(chǎng)景下,Peewee 能快速搭建起數(shù)據(jù)操作模塊。

再者,Peewee 的性能在特定場(chǎng)景下表現(xiàn)出色,如對(duì) SQLite 數(shù)據(jù)庫(kù)的操作,其資源占用相對(duì)較低,能為應(yīng)用帶來(lái)更好的運(yùn)行效果。

總之,如果項(xiàng)目規(guī)模不大,或者做一些小工具,那么Peewee 會(huì)更加趁手。

2. 快速上手

2.1. 初始化數(shù)據(jù)庫(kù)

針對(duì)不同的數(shù)據(jù)庫(kù)類型,有相應(yīng)的初始化方式。

下面我們選擇使用SQLite

from peewee import SqliteDatabase

db = SqliteDatabase('my_database.db')

2.2. 模型定義

在 Peewee 中,通過(guò)定義類來(lái)創(chuàng)建模型,類的屬性對(duì)應(yīng)數(shù)據(jù)庫(kù)表中的字段。例如:

from peewee import Model, CharField, IntegerField

class User(Model):
    class Meta:
        database = db

    username = CharField(unique=True)
    age = IntegerField()

2.3. 創(chuàng)建數(shù)據(jù)庫(kù)和表

連接數(shù)據(jù)庫(kù),然后就可通過(guò)SqliteDatabase來(lái)創(chuàng)建表。

if __name__ == "__main__":
    db.connect()
    db.create_tables([User])

執(zhí)行之后,就會(huì)發(fā)現(xiàn)創(chuàng)建了sqlite數(shù)據(jù)庫(kù)和表。

$  sqlite3.exe .\my_database.db
SQLite version 3.45.3 2024-04-15 13:34:05 (UTF-16 console I/O)
Enter ".help" for usage hints.
sqlite> .tables
user

db.create_tables反復(fù)執(zhí)行也沒(méi)關(guān)系,如果表已經(jīng)存在,不會(huì)重復(fù)創(chuàng)建。

2.4. 數(shù)據(jù)存儲(chǔ)與檢索

存儲(chǔ)數(shù)據(jù)時(shí),先創(chuàng)建模型實(shí)例并賦值,然后調(diào)用 save 方法即可將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)。

if __name__ == "__main__":
    user = User(username="Harry", age=23)
    user.save()

運(yùn)行之后,查詢數(shù)據(jù)庫(kù),發(fā)現(xiàn)數(shù)據(jù)已經(jīng)寫入了數(shù)據(jù)庫(kù)。

sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ Harry    │ 23  │
└────┴──────────┴─────┘

檢索數(shù)據(jù)可以使用各種查詢方法。如獲取單個(gè)記錄:

user = User.get(User.username == "Harry")
print(f"name: {user.username}, age: {user.age}")

# 運(yùn)行結(jié)果:
# name: Harry, age: 23

2.5. 更新記錄

更新記錄,比如將上面的年齡改為30。

User.update(age=30).where(User.username == 'Harry').execute()

運(yùn)行之后:

sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ Harry    │ 30  │
└────┴──────────┴─────┘

2.6. 刪除記錄

刪除記錄也很簡(jiǎn)單:

User.delete().where(User.username == 'Harry').execute()

運(yùn)行之后:

sqlite> select * from user;
sqlite> select count(1) from user;
┌──────────┐
│ count(1) │
├──────────┤
│ 0        │
└──────────┘

3. 高級(jí)查詢功能

高級(jí)的查詢功能包括多條件過(guò)濾,排序以及分頁(yè)查詢等等。

3.1. 批量插入數(shù)據(jù)

為了演示高級(jí)查詢功能,先批量插入一批數(shù)據(jù)。

User.insert_many(users, fields=[User.username, User.age]).execute()

運(yùn)行結(jié)果:

sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ harry    │ 23  │
│ 2  │ lily     │ 20  │
│ 3  │ tom      │ 35  │
│ 4  │ jerry    │ 12  │
│ 5  │ kate     │ 42  │
└────┴──────────┴─────┘

3.2. 多條件查詢

多個(gè)條件的交集,比如id>2并且age>30的數(shù)據(jù):

users = User.select().where((User.id > 2) & (User.age > 30)).execute()

print("滿足條件的用戶:")
for u in users:
    print(f"{u.username}: {u.age}")

運(yùn)行結(jié)果:

$  python.exe .\main.py
滿足條件的用戶:
tom: 35
kate: 42

多個(gè)條件的并集,比如id>4或者age>20的數(shù)據(jù):

users = User.select().where((User.id > 4) | (User.age > 20)).execute()

運(yùn)行結(jié)果:

$  python.exe .\main.py
滿足條件的用戶:
harry: 23
tom: 35
kate: 42

3.3. 排序

按照年齡增長(zhǎng)排序:

users = User.select().order_by(User.age)

運(yùn)行結(jié)果:

$  python.exe .\main.py
按照年齡增長(zhǎng)排序:
jerry: 12
lily: 20
harry: 23
tom: 35
kate: 42

按照年齡減少方向排序:

users = User.select().order_by(User.age.desc())

運(yùn)行結(jié)果:

$  python.exe .\main.py
按照年齡減少排序:
kate: 42
tom: 35
harry: 23
lily: 20
jerry: 12

3.4. 分頁(yè)查詢

最后,再來(lái)看看分頁(yè)查詢,這在前端展示大規(guī)模數(shù)據(jù)時(shí)非常有用。

一般的ORM會(huì)通過(guò)SQL語(yǔ)句中的limitoffset來(lái)實(shí)現(xiàn)分頁(yè)查詢,而Peewee直接提供了分頁(yè)查詢的API。

page_number = 1 # 頁(yè)序號(hào),從1開(kāi)始
page_size = 3  # 每頁(yè)數(shù)據(jù)的數(shù)量

users = User.select().paginate(page_number, page_size)
print(f"第{page_number}頁(yè)數(shù)據(jù):")
for u in users:
    print(f"{u.username}: {u.age}")

運(yùn)行結(jié)果:

$  python.exe .\main.py
第1頁(yè)數(shù)據(jù):
harry: 23
lily: 20
tom: 35

這樣就顯示了前3個(gè)數(shù)據(jù),如果把上面的page_numberg=2,那么會(huì)返回剩下的2條數(shù)據(jù)。

4. 總結(jié)

Peewee 還擁有眾多擴(kuò)展,如 Playhouse 提供了更多高級(jí)功能,包括對(duì)不同數(shù)據(jù)庫(kù)的特定擴(kuò)展(如 SQLite 的擴(kuò)展函數(shù))、模型生成工具、數(shù)據(jù)庫(kù)遷移工具、反射功能等,大大增強(qiáng)了 Peewee 的實(shí)用性和靈活性。

本篇介紹的是最基本的使用方法,其他還有多表之間關(guān)系的建立和查詢,請(qǐng)參考官方的文檔。

總之,Peewee 以其簡(jiǎn)潔的語(yǔ)法、豐富的功能和良好的擴(kuò)展性,成為 Python 開(kāi)發(fā)者在數(shù)據(jù)庫(kù)操作方面的有力工具,無(wú)論是小型項(xiàng)目還是大型應(yīng)用,都能提供高效可靠的數(shù)據(jù)庫(kù)交互支持。

到此這篇關(guān)于Python簡(jiǎn)潔強(qiáng)大的ORM框架Peewee的用法詳解的文章就介紹到這了,更多相關(guān)Python Peewee內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pip?install如何指定包的安裝路徑

    pip?install如何指定包的安裝路徑

    最近學(xué)習(xí)python需要用pip下載一些包,但是發(fā)現(xiàn)下載后在pycharm中根本導(dǎo)入不了,下面這篇文章主要給大家介紹了關(guān)于pip?install如何指定包的安裝路徑的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Python 面試中 8 個(gè)必考問(wèn)題

    Python 面試中 8 個(gè)必考問(wèn)題

    這篇文章主要介紹了Python 面試中 8 個(gè)必考問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Python道路車道線檢測(cè)的實(shí)現(xiàn)

    Python道路車道線檢測(cè)的實(shí)現(xiàn)

    在本文中,我們將構(gòu)建一個(gè)機(jī)器學(xué)習(xí)項(xiàng)目來(lái)實(shí)時(shí)檢測(cè)車道線。我們將使用 OpenCV 庫(kù)使用計(jì)算機(jī)視覺(jué)的概念來(lái)做到這一點(diǎn),感興趣的可以了解一下
    2021-06-06
  • TensorFlow實(shí)現(xiàn)簡(jiǎn)單卷積神經(jīng)網(wǎng)絡(luò)

    TensorFlow實(shí)現(xiàn)簡(jiǎn)單卷積神經(jīng)網(wǎng)絡(luò)

    這篇文章主要為大家詳細(xì)介紹了TensorFlow實(shí)現(xiàn)簡(jiǎn)單卷積神經(jīng)網(wǎng)絡(luò),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python中單雙下劃線的區(qū)別對(duì)比分析

    python中單雙下劃線的區(qū)別對(duì)比分析

    Python中存在一些特殊的方法,有些方法以雙下劃線 “__” 開(kāi)頭和結(jié)尾,它們是Python的魔法函數(shù),比如__init__()和__str__等等,不用要這種方式命名自己的變量或者函數(shù),這篇文章主要介紹了python里面單雙下劃線的區(qū)別,需要的朋友可以參考下
    2023-04-04
  • python3.4實(shí)現(xiàn)郵件發(fā)送功能

    python3.4實(shí)現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了python3.4實(shí)現(xiàn)郵件發(fā)送功能,含帶中文附件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python中OpenCV圖像特征和harris角點(diǎn)檢測(cè)

    Python中OpenCV圖像特征和harris角點(diǎn)檢測(cè)

    Harris角點(diǎn)檢測(cè)算子是于1988年由CHris Harris & Mike Stephens提出來(lái)的。在具體展開(kāi)之前,不得不提一下Moravec早在1981就提出來(lái)的Moravec角點(diǎn)檢測(cè)算子。本文重點(diǎn)給大家介紹OpenCV圖像特征harris角點(diǎn)檢測(cè)知識(shí),一起看看吧
    2021-09-09
  • python實(shí)現(xiàn)粒子群算法

    python實(shí)現(xiàn)粒子群算法

    這篇文章主要介紹了python如何實(shí)現(xiàn)粒子群算法,幫助大家更好的進(jìn)行機(jī)器學(xué)習(xí),感興趣的朋友可以了解下
    2020-10-10
  • python如何爬取網(wǎng)頁(yè)中的文字

    python如何爬取網(wǎng)頁(yè)中的文字

    在本篇文章里小編給大家整理的是關(guān)于python如何爬取網(wǎng)頁(yè)中的文字的相關(guān)實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • 總結(jié)Python編程中函數(shù)的使用要點(diǎn)

    總結(jié)Python編程中函數(shù)的使用要點(diǎn)

    這篇文章主要介紹了Python編程中函數(shù)的使用要點(diǎn)總結(jié),文中也講到了人民群眾喜聞樂(lè)見(jiàn)的lambda表達(dá)式的用法,需要的朋友可以參考下
    2016-03-03

最新評(píng)論

资阳市| 万山特区| 罗田县| 潞城市| 墨玉县| 肥东县| 灵山县| 石阡县| 河西区| 大安市| 逊克县| 屏山县| 浑源县| 天门市| 威海市| 浮梁县| 高淳县| 沈阳市| 扬州市| 望都县| 革吉县| 那坡县| 长泰县| 黄龙县| 渝中区| 南城县| 崇文区| 韩城市| 泸溪县| 承德市| 调兵山市| 界首市| 宣武区| 巴林左旗| 德兴市| 阳东县| 乐至县| 富宁县| 彭水| 金阳县| 天台县|