python SQLAlchemy的Mapping与Declarative详解

yizhihongxing

接下来我将详细讲解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 作为一门强大的解释型语言,完全支持二进制数据的读写。下面是 Python 如何读写二进制数组数据的完整攻略。 numpy包 numpy包是 python 的一个扩展程序库, 支持大量高维数组与矩阵运算, 并对数…

    python 2023年5月14日
    00
  • Linux下查看nginx apache mysql php的编译参数

    可以使用以下步骤在Linux下查看nginx、apache、mysql和php的编译参数: 查看nginx的编译参数 进入nginx的安装目录,在bin下找到可执行文件nginx,使用以下命令获取nginx的编译参数: /usr/local/nginx/sbin/nginx -V 示例输出: “` nginx version: nginx/1.18.0 b…

    python 2023年6月3日
    00
  • python安装配置

    Python简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 Python 是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。 Python 是交互式语言:这意…

    python 2023年4月17日
    00
  • python 时间 T 去掉 带上ms 毫秒 时间格式的操作

    想要从带有毫秒的时间格式中去掉毫秒,可以采用Python内建的datetime模块。具体的步骤如下: 导入datetime模块 在代码的开头,可以加上以下语句,导入datetime模块: import datetime 将字符串格式的时间转换为datetime对象 假设有一个字符串时间格式为”2022-01-01 23:59:59.999″,可以使用date…

    python 2023年6月2日
    00
  • Python函数中的作用域规则详解

    Python函数中的作用域规则详解 作用域是程序中变量可见性和生命周期的范围,Python中的作用域可以被分成四种:局部作用域、嵌套作用域、全局作用域和内置作用域。了解这些作用域规则是理解Python语言非常关键的部分之一。 局部作用域 在Python函数中,由程序员在函数内部定义的变量属于函数内部的局部作用域。当一个函数被调用时,这个函数的局部作用域被创建…

    python 2023年6月5日
    00
  • 详解Python中的编码问题(encoding与decode、str与bytes)

    详解Python中的编码问题 在Python中,经常会用到编码相关的操作,因此理解编码问题是很重要的。本篇攻略将详解Python中的编码问题,包括编码与解码(encoding与decode)、str与bytes等主要内容。 编码与解码 编码通常指将字符串转换为字节序列,解码则是将字节序列转换为字符串。在Python中,有两个内置的函数,可以进行编码与解码的操…

    python 2023年5月20日
    00
  • Python使用folium excel绘制point

    下面我来详细讲解“Python使用folium excel绘制point”的完整攻略。 准备工作 使用pip安装folium、pandas和openpyxl三个库,它们分别用于在地图上标记点、读取Excel文件和操作Excel文件。 pip install folium pandas openpyxl 示例一:从Excel文件中读取数据并绘制标记点 首先,我…

    python 2023年6月3日
    00
  • Python随机数模块详情

    下面是关于 Python 随机数模块的详细讲解。 1. Python 随机数模块概述 Python 中的随机数模块是 random,通过使用此模块,我们可以方便地生成随机数序列。该模块中提供了许多可以帮助我们生成随机数序列的工具函数。 2. Python 随机数模块常用函数 2.1 randint() 函数 randint(a, b) 函数可以帮助我们生成区…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部