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

Python中的ORM框架Databases實戰

WBOY
WBOY原創
2023-06-10 17:42:092566瀏覽

近年來,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