首页 后端开发 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教程
1666
14
CakePHP 教程
1425
52
Laravel 教程
1323
25
PHP教程
1272
29
C# 教程
1251
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