近年來,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等多種類型的資料庫。
針對Databases框架的安裝,可以使用pip安裝,指令如下:
pip install databases==0.4.*
在使用Databases框架進行開發之前,需要先連接到資料庫中。連接資料庫所需參數包括資料庫類型、主機名稱、資料庫名稱、使用者名稱和密碼等。本次開發中,我們嘗試連線到MySQL資料庫中,程式碼如下:
import databases DATABASE_URL = "mysql://user:password@hostname/database_name" database = databases.Database(DATABASE_URL)
這裡,QAQsaaspassword是連接資料庫的密碼,askdnsadn312as是連接資料庫的使用者名,localhost是資料庫所在的主機名稱或IP位址,my_database是資料庫的名稱。
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)。
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中文網其他相關文章!