首頁 後端開發 Python教學 Python中的ORM框架Databases實戰

Python中的ORM框架Databases實戰

Jun 10, 2023 pm 05:42 PM
實戰 orm databases

近年來,Python成為了一種高效能、易用、且靈活的程式語言,而在Python的開發領域中,Databases ORM框架的應用越來越普遍。 Databases是一個簡單直覺、輕量的ORM框架,它支援多種資料庫,包括但不限於MySQL、PostgreSQL、SQLite和Microsoft SQL Server。本文將為你詳細介紹Databases框架,以及它在Python開發中的具體應用。

一、ORM框架的概念

ORM全稱為物件關係映射(Object Relational Mapping),是一種將關係型資料庫表與Python物件之間進行映射,從而實現開發者在程式設計過程中不再需要進行SQL語句操作的技術, ORM架構在Python中的應用,為開發者提供了更多選擇,使得程式開發更加便利。

二、Databases框架

Databases是由Django ORM的開發者Andrew Goodwin所開發的一款簡潔的ORM框架,其最大特點就是輕量級,以及方便、易於使用,而且支援多種資料庫,包括MySQL、PostgreSQL、SQLite和Microsoft SQL Server等多種類型的資料庫。

  1. 安裝Databases框架

針對Databases框架的安裝,可以使用pip安裝,指令如下:

pip install databases==0.4.*
登入後複製
  1. 連線資料庫

在使用Databases框架進行開發之前,需要先連接到資料庫中。連接資料庫所需參數包括資料庫類型、主機名稱、資料庫名稱、使用者名稱和密碼等。本次開發中,我們嘗試連線到MySQL資料庫中,程式碼如下:

import databases

DATABASE_URL = "mysql://user:password@hostname/database_name"

database = databases.Database(DATABASE_URL)
登入後複製
登入後複製

這裡,QAQsaaspassword是連接資料庫的密碼,askdnsadn312as是連接資料庫的使用者名,localhost是資料庫所在的主機名稱或IP位址,my_database是資料庫的名稱。

  1. 建立表格與列

Databases框架支援SQL運算式語言來建立複雜的查詢語句,使得開發者能夠更靈活的控制SQL執行過程。在Databases框架中,我們可以使用Table類別來建立表格,使用Column類別來建立列。

表格建立程式碼如下:

import sqlalchemy

metadata = sqlalchemy.MetaData()

users = sqlalchemy.Table(
    "users",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("username", sqlalchemy.String),
    sqlalchemy.Column("password", sqlalchemy.String),
    sqlalchemy.Column("email", sqlalchemy.String),
)
登入後複製

這裡,我們使用了SQLAlchemy中的MetaData對象,透過定義一個users表格,建立了四個欄位(id、username、password和email)。

  1. 執行SQL語句

Databases框架也提供了直接使用SQL語句進行操作的方法,這種方法更加靈活。可以透過execute()方法來實現SQL語句的執行,程式碼如下:

result = await database.execute(query)
登入後複製

其中query代表的是SQL語句程式碼,result則是執行結果,當執行成功時,它會傳回一個由dict類型組成的list,每個dict代表SQL查詢結果中的一筆記錄。

5.在Databases中使用ORM

Databases框架同樣支援ORM的方式來操作SQL語句,對開發者而言,更方便。 ORM的方式有助於將物件關係映射到資料庫上,使得程式碼具有更好的可讀性和可維護性。

使用ORM的方式,我們可以透過定義模型的方式來操作資料庫,程式碼如下:

import sqlalchemy

metadata = sqlalchemy.MetaData()

users = sqlalchemy.Table(
    "users",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("username", sqlalchemy.String),
    sqlalchemy.Column("password", sqlalchemy.String),
    sqlalchemy.Column("email", sqlalchemy.String),
)

class UserModel:
    id: int
    username: str
    password: str
    email: str

    __tablename__ = "users"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)
登入後複製

這裡,我們定義了一個UserModel模型類,代表我們的資料表對象,同時我們透過簡單的定義,即可完成SQLAlchemy中表、列的定義,使其ORM映射到資料庫上,方便快捷,易於維護。

三、應用程式實例

在此,我們以一個簡單的部落格應用為例,示範Databases框架的具體操作。

1.連接到資料庫

進行資料庫連接所需的資訊也非常簡單,如下程式碼所示:

import databases

DATABASE_URL = "mysql://user:password@hostname/database_name"

database = databases.Database(DATABASE_URL)
登入後複製
登入後複製

這裡的DATABASE_URL指定了連接到MySQL的各項參數,以此來連接到我們的資料庫系統。

2.定義模型

在這個部落格範例中,我們需要定義兩個資料模型,一個是Blog模型,代表部落格文章對象,產生程式碼如下:

class Blog:
    id: int
    title: str
    description: str
    content: str

    __tablename__ = "blog"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)
登入後複製

另一個是User模型,代表使用者對象,產生程式碼如下:

class User:
    id: int
    name: str
    email: str
    password: str

    __tablename__ = "user"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)
登入後複製

類似地,我們透過簡單的定義,使其ORM映射到我們連接的MySQL資料庫。

3.建立表格

由於我們所操作的資料庫系統為MySQL,因此我們需要建立對應的表格,產生程式碼如下:

CREATE TABLE `blog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT NULL,
  `description` varchar(100) DEFAULT NULL,
  `content` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
登入後複製

4.插入資料

我們可以使用ORM的方式很方便地輸入數據,生成程式碼如下:

async def create_blog_post(title: str, description: str, content: str):
    query = blog.insert().values(title=title, description=description, content=content)
    return await database.execute(query)

async def create_user(name: str, email: str, password: str):
    query = user.insert().values(name=name, email=email, password=password)
    return await database.execute(query)
登入後複製

這裡我們使用了insert()方法來完成資料插入的操作,具有很好的可讀性,方便開發者更好地維護程式碼。

5.查詢資料

Databases框架同樣支援執行查詢操作,如下程式碼所示:

async def get_blog_post(id: int):
    query = blog.select().where(blog.c.id == id)
    return await database.fetch_one(query)

async def get_all_users():
    query = user.select()
    return await database.fetch_all(query)

async def get_users_by_email(email: str):
    query = user.select().where(user.c.email == email)
    return await database.fetch_all(query)
登入後複製

這裡我們使用了select()方法,拼接條件取得一個生成器,遍歷之時回傳數對。我們也可以透過使用查詢資料的方式,來實現資料的篩選和排序。

總結

Databases框架是一個針對Python開發者而言的一個靈活、易用、輕量級的ORM框架,它可以輕鬆地支援多種資料庫,方便開發者進行資料的儲存、操作、篩選和排序等。本文從連接資料庫到定義模型的操作,再到資料插入和查詢操作,展示了Databases框架的靈活性以及易用性,方便開發者更有效率的開發Python程式。

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

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
PHP中如何使用物件-關聯映射(ORM)簡化資料庫操作? PHP中如何使用物件-關聯映射(ORM)簡化資料庫操作? May 07, 2024 am 08:39 AM

使用ORM可簡化PHP中的資料庫操作,它將物件對應到關聯式資料庫中。 Laravel中的EloquentORM允許使用物件導向的語法與資料庫交互,可透過定義模型類別、使用Eloquent方法或在實戰中建立部落格系統等方式來使用ORM。

PHP實戰:快速實作斐波那契數列的程式碼範例 PHP實戰:快速實作斐波那契數列的程式碼範例 Mar 20, 2024 pm 02:24 PM

PHP實戰:快速實現斐波那契數列的程式碼範例斐波那契數列是數學中一個非常有趣且常見的數列,其定義如下:第一個和第二個數為0和1,從第三個數開始,每個數都是前兩個數的和。斐波那契數列的前幾個數字依序為0,1,1.2,3,5,8,13,21,...依此類推。在PHP中,我們可以透過遞歸和迭代兩種方式來實現斐波那契數列的生成。下面我們分別來展示這兩

Hibernate 如何實作多型映射? Hibernate 如何實作多型映射? Apr 17, 2024 pm 12:09 PM

Hibernate多態映射可映射繼承類別到資料庫,提供以下映射類型:joined-subclass:為子類別建立單獨表,包含父類別所有欄位。 table-per-class:為子類別建立單獨資料表,僅包含子類別特有列。 union-subclass:類似joined-subclass,但父類別表聯合所有子類別列。

Java Hibernate 框架的 ORM 機制是什麼? Java Hibernate 框架的 ORM 機制是什麼? Apr 17, 2024 pm 02:39 PM

Hibernate是一個JavaORM框架,用於在Java物件和關聯式資料庫之間建立映射。其ORM機制包含以下步驟:註解/配置:物件類別以註解或XML檔案標記,指定其對應的資料庫表和列。會話工廠:管理Hibernate與資料庫的連線。會話:表示與資料庫的活動連接,用於執行查詢和更新操作。持久化:透過save()或update()方法將資料儲存到資料庫中。查詢:使用Criteria和HQL定義複雜查詢來檢索資料。

Java開發實戰:整合七牛雲雲端儲存服務實作文件上傳 Java開發實戰:整合七牛雲雲端儲存服務實作文件上傳 Jul 06, 2023 pm 06:22 PM

Java開發實戰:整合七牛雲端儲存服務實作檔案上傳引言隨著雲端運算和雲端儲存的發展,越來越多的應用程式需要將檔案上傳至雲端進行儲存和管理。雲端儲存服務的優勢在於高可靠性、可擴充性和靈活性。本文將介紹如何使用Java語言開發,整合七牛雲端儲存服務,實現文件上傳功能。七牛雲簡介七牛雲是國內領先的雲端儲存服務供應商,提供了全面的雲端儲存和內容分發服務。使用者可以透過七牛雲提

深入學習 Elasticsearch 查詢文法與實戰 深入學習 Elasticsearch 查詢文法與實戰 Oct 03, 2023 am 08:42 AM

深入學習Elasticsearch查詢語法與實戰引言:Elasticsearch是一款基於Lucene的開源搜尋引擎,主要用於分散式搜尋與分析,廣泛應用於大規模資料的全文搜尋、日誌分析、推薦系統等場景。在使用Elasticsearch進行資料查詢時,靈活運用查詢語法是提高查詢效率的關鍵。本文將深入探討Elasticsearch查詢語法,並結合實際案例給出

Hibernate ORM 框架的缺點是什麼? Hibernate ORM 框架的缺點是什麼? Apr 18, 2024 am 08:30 AM

HibernateORM框架有以下缺點:1.記憶體消耗大,因其快取查詢結果和實體物件;2.複雜性高,需要深入了解架構和配置;3.延遲載入延遲,導致意外延遲;4.效能瓶頸,在大量實體同時載入或更新時可能出現;5.特定於供應商的實現,導致資料庫之間差異。

PHP 物件關係映射與資料庫抽象層如何提升程式碼可讀性 PHP 物件關係映射與資料庫抽象層如何提升程式碼可讀性 May 06, 2024 pm 06:06 PM

答:ORM(物件關聯映射)和DAL(資料庫抽象層)透過抽象底層資料庫實現細節,提高程式碼可讀性。詳細描述:ORM使用物件導向方式與資料庫交互,使程式碼更接近應用程式邏輯。 DAL提供與資料庫供應商無關的通用接口,簡化了與不同資料庫的交互作用。使用ORM和DAL可以減少SQL語句的使用,讓程式碼更簡潔。在實戰案例中,ORM和DAL可以簡化對產品資訊的查詢,提高程式碼可讀性。

See all articles