python SQLAlchemy的Mapping与Declarative详解

接下来我将详细讲解Python SQLAlchemy的Mapping与Declarative。

什么是SQLAlchemy

SQLAlchemy是一个Python编程语言下的ORM库和SQL工具包。

ORM(Object Relational Mapping)是一种编程技术,用于将数据库和面向对象编程语言之间的数据映射,实现面向对象的编程。SQLAlchemy基于这种技术,提供了一种将对象关系转化为SQL语言的方法,从而实现数据库的操作。

SQLAlchemy的Mapping与Declarative

SQLAlchemy提供了两种ORM编程模型:Mapping和Declarative。

Mapping

Mapping是最初版本的ORM编程模型,它的实现方式是通过将数据库的表和Python中的类进行映射,这样,使用Python类就可以访问数据库中的表数据。

在使用Mapping时,我们需要先建立与数据库的连接,通过metaclass方式定义类,在类中描述映射关系,进行数据查询和更改。

以下是一个简单的Mapping代码示例:

from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

在这个示例中,我们通过declarative_base函数创建了一个基类Base,所有的映射类都需要继承自这个基类。

类中,使用了__tablename__属性指定表名,使用Column函数定义列,设置列的数据类型。

当定义好了映射类之后,我们就可以创建一个与数据库的会话并使用该映射类进行数据的查询和更改:

engine = create_engine('sqlite:///test.db', echo=True)
Base.metadata.create_all(engine)

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

user = User(name='test', age=20)
session.add(user)
session.commit()

query = session.query(User).filter_by(name='test')
print(query.first())

在这个示例中,create_engine函数创建了与SQLite数据库的连接,并使用echo参数打开调试信息输出。metadata.create_all函数将映射类创建的表生成到数据库中。

在创建会话之后,使用映射类创建一个新的用户对象,并将其加入到会话中进行提交。最后,通过session.query函数执行与数据库的查询并打印结果。

Declarative

Declarative是SqlAlchemy的高级ORM模型,它对映射类进行了封装,使用类的继承机制实现对关系的描述,支持更加简单的API、更加直观的查询语句和更加灵活的关系表达方式。

以下是一个简单的Declarative代码示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

engine = create_engine('sqlite:///test.db', echo=True)
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

user = User(name='test', age=20)
session.add(user)
session.commit()

query = session.query(User).filter_by(name='test')
print(query.first())

与Mapping相比,Declarative将表的声明与映射类进行了绑定,使得操作更加简单。在创建映射类的时候,只需继承自declarative_base函数生成的基类Base,将类的表名和列定义在类中即可。

总结

本文主要介绍了Python SQLAlchemy的Mapping和Declarative两种ORM编程模型,通过示例代码演示了两种模型的使用方式,包括连接数据库、定义映射类、执行增、删、改、查、批量插入、事务等操作。

感谢您的阅读,如果您还有其他问题,请随时提出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python SQLAlchemy的Mapping与Declarative详解 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • python实现学生管理系统源码

    Python实现学生管理系统源码 1. 概述 学生管理系统是非常基础的管理系统,它可以帮助老师和管理员轻松管理学生信息。在Python中,我们可以使用面向对象的编程思想来实现学生管理系统,数据可以存储在本地或者数据库中。 2. 实现步骤 2.1. 设计数据模型 首先需要设计好数据模型,即需要存储哪些信息,例如学生的姓名、学号、性别、年龄、班级等信息。然后根据…

    python 2023年5月30日
    00
  • python的urllib模块显示下载进度示例

    如果要在python中显示下载进度,可以使用urllib库中的urlretrieve()函数。根据其文档,这个函数能够将远程数据下载到本地,同时提供一个可选参数”reporthook”。reporthook函数会在下载过程中被多次调用,允许显示下载进度和其他状态信息。 以下是一个简单示例,演示如何使用reporthook参数来显示下载进度。 import u…

    python 2023年6月3日
    00
  • Python读取视频的两种方法(imageio和cv2)

    Python读取视频有很多方法,其中比较常用的两种方法分别是:imageio和cv2。下面将分别详细讲解这两种方法的使用步骤和示例代码。 一、使用imageio读取视频 1. 安装imageio 使用pip命令安装imageio: pip install imageio 2. 读取视频文件 读取视频文件需要用到imageio的imread函数。示例代码如下:…

    python 2023年5月18日
    00
  • 详细总结Python类的多继承知识

    对于“详细总结Python类的多继承知识”的完整攻略,我会分成以下几个部分来讲解: 1. 知识点概述 Python支持多继承,即一个类可以继承多个父类,并且可以从这些父类中继承属性和方法。但是,多继承也带来了一些问题,例如: 方法名冲突:如果多个父类中有同名方法,这会让子类的方法定义变得模糊不清。 调用顺序问题:多个父类中可能同时定义了同名的方法,如果没有指…

    python 2023年6月2日
    00
  • Python xpath,JsonPath,bs4的基本使用

    Python xpath, JsonPath, bs4的基本使用 在本教程中,我们将介绍Python中xpath、JsonPath和bs4的基本使用方法。这些工具可以帮助我们在爬虫过程中解析HTML、XML和JSON数据。我们将提供两个示例,演示如何使用这些工具。 XPath XPath是一种用于在XML文档中定位元素的语言。在Python中,我们可以使用l…

    python 2023年5月15日
    00
  • Python绘制数码晶体管日期

    下面是Python绘制数码晶体管日期的完整攻略。 简介 数码晶体管是一种电子显示器件,这种显示器很早就被广泛应用于计算机、电子表和其他电子设备的显示屏中。本攻略将使用Python的turtle库绘制一个简单的数码晶体管日期。 准备工作 在开始之前,我们需要安装Python和turtle库。具体操作可以参考安装教程。 绘制数字 我们先来实现绘制数字的函数。为了…

    python 2023年6月2日
    00
  • python+splinter实现12306网站刷票并自动购票流程

    下面是“Python+Splinter实现12306网站刷票并自动购票流程”的攻略: 1. 准备工作 首先,你需要安装 Python 和 Splinter 库。Splinter 是一个简单的 Python 库,它提供了一个简化的 API 来模拟人类用户使用网页进行交互。 安装方法: pip install splinter 2. 刷票流程 2.1 初始化浏览…

    python 2023年5月18日
    00
  • Discord Python Bot:在消息中搜索单词

    【问题标题】:Discord Python Bot: Searching for words in a MessageDiscord Python Bot:在消息中搜索单词 【发布时间】:2023-04-02 11:10:01 【问题描述】: 我的 Bot 有一个小代码,如果有人写 uwu,它会与 owo 做出反应(例如)。但我只能使用 if message…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部