首頁  >  文章  >  後端開發  >  Python中的ORM框架Databases詳解

Python中的ORM框架Databases詳解

WBOY
WBOY原創
2023-06-11 13:34:372269瀏覽

近年來,Python作為一種易學易用、極為靈活的程式語言在開發領域中愈發受歡迎。在Python應用程式中,ORM(Object-Relational Mapping,物件關係映射)框架扮演著至關重要的角色,不僅大大提高了開發效率,也讓開發者更方便管理資料和物件。

在ORM框架中,Databases函式庫是一種新興的Python函式庫,在開發過程中常用於存取關聯式資料庫。雖然這個庫在Python開發領域中還算新生代,但它已經展現出了極大的潛力。因此,在這篇文章中,我們將對Databases庫進行詳細介紹,幫助開發者更了解並學習這個強大的Python ORM框架。

一、Databases開發背景

Databases函式庫是一個輕量級的Python函式庫,用來簡化使用非同步SQL資料庫的開發工作。它使用asyncio進行非同步編程,可以與多種SQL資料庫引擎協作,如PostgreSQL、MySQL、MariaDB、SQLite等等。並且,Databases函式庫也提供了高度簡潔且易於使用的API。

Databases庫的目標是讓開發者更快地建立應用程序,並消除大量重複性程式碼。它在性能上表現得非常出色,並提供了諸如連接池、事務管理等高級功能以及諸多非同步驅動的增強特性和幫助文件。因此,對於那些需要協作存取SQL資料庫的複雜微服務或大型Web應用程式而言,Databases函式庫無疑是一個非常不錯的選擇。

二、Databases核心功能

Databases函式庫的設計目標是讓開發者使用簡單的API,從而實現與SQL資料庫的快速互動。以下我們將介紹一些Databases函式庫的核心功能:

1.程式碼簡潔清晰

Databases函式庫使用Python的簡潔語法來最大限度地提高開發者的開發效率,它可以實現Python的所有高級特性,如非同步和並發操作。

例如,下面的這段程式碼建立了一個名為"users"的表。其中,表的幾個屬性包括ID、Name、Age和Email。

import databases

database = databases.Database("sqlite:///example.db")

query = "CREATE TABLE users (ID INT PRIMARY KEY, Name TEXT, Age INT, Email TEXT)"

await database.execute(query=query)

2.協作用戶端和服務端的API

Databases庫提供了一個高級API,其中包括了非同步以及同步的操作,因此我們在使用時可以將這些操作統一起來。

import database

database = databases.Database("sqlite:///example.db")

# 异步操作(async)
async with database.transaction():
   query = "INSERT INTO users (ID, Name, Age, Email) VALUES (:id, :name, :age, :email)"
   values = {"id": 1, "name": "John Doe", "age": 23, "email": "[email protected]"}
   await database.execute(query=query, values=values)

# 同步操作
query = "SELECT * FROM users WHERE ID=:id"
values = {"id": 1}
result = database.fetch_one(query=query, values=values)

3.連線池

Databases函式庫能夠輕鬆地管理連線池問題,提高了資料庫存取的效率。開發者在使用Databases庫時,只需要指定連接池大小,即可輕鬆實現自動化連接,而無需手動管理連接,非常方便。

例如,下面的這段程式碼,我們可以指定最大連線數和最小連線數,讓Databases函式庫可以更好地管理連線池。

import databases

database = databases.Database("sqlite:///example.db", min_size=1, max_size=10)

4.事務管理

Databases庫提供了整合事務管理,確保在執行操作時,可以確保一致性和可靠性。事務是一個非常重要的DBMS特性,它使得開發者可以批次執行操作。

例如,下面的這段程式碼,我們可以透過非同步開始和提交交易來協作處理資料。

import databases

database = databases.Database("sqlite:///example.db")

async with database.transaction():
   query_1 = "INSERT INTO users (ID, Name, Age, Email) VALUES (:id, :name, :age, :email)"
   values_1 = {"id": 1, "name": "John Doe", "age": 23, "email": "[email protected]"}
   await database.execute(query=query_1, values=values_1)

   query_2 = "UPDATE users SET Age=:age WHERE ID=:id"
   values_2 = {"age": 25, "id": 1}
   await database.execute(query=query_2, values=values_2)

await database.commit()

5.支援多種資料庫引擎

Databases函式庫支援多種常見的資料庫引擎,包括MySQL、PostgreSQL、MariaDB等等。這使得我們可以很方便地建立我們想要的資料庫環境。

例如我們有以下的程式碼片段,我們就可以根據需要選擇自己常用的資料庫引擎。

import databases

database = databases.Database("postgresql://user:[email protected]:5432/example")

三、使用Databases库

在学习使用Databases库之前,我们需要先进行库的安装工作。

1.安装Databases库

我们可以通过以下命令安装Databases库:

pip install databases

2.创建数据库连接

要使用Databases库,我们首先需要通过URL字符串为我们的PHP应用程序创建一个与数据库引擎的连接。

import databases
from databases import Database

database = Database("sqlite:///example.db")





##########################1
3.查询数据

Databases库提供了8个异步和同步函数,可用于查询数据库: `fetch_all()`,`fetch_one()`, `fetch_val()`, `fetch_many()`, `fetch_optional()`, `execute()`, `execute_many()`和`iterate()`
###查詢所有行######result = database.fetch_all("SELECT * FROM users")######查詢第一行資料######result = database.fetch_one(" SELECT * FROM users WHERE ID=:id", value = {"id": 1})######取得儲存格資料######result = database.fetch_val("SELECT Name FROM users WHERE ID =:id", value = {"id": 1})######取得多個行資料######result = database.fetch_many(query="SELECT * FROM users", values=[ {'id':1}, {'id':2})######如果資料不存在回傳None######result = database.fetch_optional(query="SELECT * FROM users WHERE ID= :id", value={"id": 3})######執行任意查詢(傳回插入的行數)######result = await database.execute("INSERT INTO users (ID, Name,Age,Email) VALUES (:id,:name,:age,:email)",value={"id":5, "name":"John","age":25,"email":" [email protected]"})######以批次方式執行任意查詢(傳回插入的行數)######result = await database.execute_many("INSERT INTO users (ID,Name,Age, Email) VALUES (:id,:name,:age,:email)",values=[{"id":5, "name":"John","age":25,"email":"[email protected ]"},{"id":6,"name":"Jack", "age":26,"email":"[email protected]"}])######使用非同步迭代器處理數據######async with database.connection() as connection:### async with connection.transaction():###
   async for row in connection.iterate(query="SELECT * FROM users"):
      print(row)
4.使用事务

Databases库还提供了事务管理的机制。我们可以使用异步with语句来绑定事务。如果with语句内的所有操作成功完成,则会提交事务。否则,事务将被回滚。
###async with database.transaction():### query = "INSERT INTO users (ID,Name,Age,Email) VALUES (:id,:name,:age,:email)"### value = {"id": 5, "name": "Hassen", "age": 26 , "email": "[email protected]"}### await database.execute(query, 值)###

query = "INSERT INTO user1 (ID,Name,Age,Email) VALUES (:id,:name,:age,:email)"
value = {"id": 6, "name": " Fatima", "age": 22, "email": "[email protected]"}
await database.execute(query, values)

以上就是Databases庫在Python ORM框架中的詳細介紹。 Databases函式庫是一個新生代的Python ORM框架,它擁有許多優秀的特性,如程式碼簡潔優化、非同步通訊操作、連接池等等,可大幅提升開發者的開發效率,促進其優秀性能的發揮。雖然Databases庫在Python開發領域中還較新,但它越來越受到社群的關注和認可。我們相信,這個函式庫將會在Python開發者的未來工作中扮演越來越重要的角色。

以上是Python中的ORM框架Databases詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn