热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享Python ORM框架之SQLAlchemy 的基础用法

一、sqlalchemy介绍1.1orm的概念orm全称objectrelationalmapping(对象关系映射),通过orm就能使用python中的对象操作数据库(在底层转换

一、sqlalchemy 介绍

1.1 orm 的概念

orm全称object relational mapping(对象关系映射),通过 orm 就能使用 python 中的对象操作数据库(在底层转换为sql语句),免去sql语句的书写。

但是,由于抽象程度较高,所以 sql 语句的执行效率比较低,因此有些情况下,还是需要我们亲自书写sql语句。

orm 是通过以下对应关系,将 python 代码转换为 sql 语句的:

python对象 关系型数据库
类属性 字段
类的实例对象 记录
实例对象的属性值 记录的字段值

1.2 sqlalchemy介绍

django 中访问数据库,通常会使用 django 自带的 orm(object relational mapping)对象关系映射来访问数据库,只需要用python的语法来操作对象,就能被自动映射为 sql 语句。

而 sqlalchemy 则是一个专门的对象关系映射器和 python sql工具包,旨在实现高效和高性能的数据库访问。

1.3 架构

Python ORM框架之SQLAlchemy 的基础用法

  • schema / types: 类到表之间的映射规则。
  • sql expression language :sql 语句。
  • engine :引擎。
  • connection pooling: 连接池。
  • dialect: 方言,调用不同的数据库 api(oracle, postgresql, mysql) 并执行对应的 sql语句。

1.4 异步

sqlalchemy 在1.4版本之前,通过 greenlet 实现对异步的支持,而在1.4及之后版本中,添加了 python asyncio 标准库的支持。所以,这需要 python 解释器版本在 3.6+。

1.5 安装

安装 sqlalchemy(1.4版本):

如果需要 greenlet 异步支持:

二、sqlalchemy 快速入门

2.1 创建配置(可选)

这一步不是必要的,但将配置单独放置一个文件中,能方便我们管理和修改。

创建一个配置文件,如 settings.py:

2.2 创建引擎和获取、关闭连接

任何 sqlalchemy 应用程序的开始都是一个名为 engine 的对象,它是一个为特定的数据库服务器创建一次的全局对象,可以理解为通过 sqlalchemy 操作数据库的连接中心,保存着连接池。

create_engine()的其他常用参数:

  • echo:设置为 true,表示将 sql 记录到记录器,该记录器将 sql 写入标准输出。
  • future:使用2.0风格的引擎和连接 api,以便使用 2.0 版本中的新特性。
  • encoding:默认为 utf-8。
  • pool_size:在连接池中保持打开的连接数。

2.3 创建 orm 模型

2.4 创建会话

每次在 python 中执行完操作后,都需要通过 session 提交到数据库:

在commit()之前,可以取消对实例对象所做的修改,也就是回滚:

2.5 创建和删除表

创建所有表:

删除所有表:

2.6 新增数据

新增数据:

变量名 = 模型类(类属性=值,……)
session.add(变量名)

批量新增:

session.add_all([
    模型类(类属性=值,……),
    模型类(类属性=值,……)
    ……
])

2.7 查询数据

查询所有:

变量名 = session.query(模型类).all()

返回模型类实例对象列表。

查询指定字段:

变量名 = session.query(模型类.字段).all()

只获取返回结果的第一个:

变量名 = session.query(模型类).first()

连表查询:

变量名 = session.query(模型类1,模型类2).filter(条件).all()

返回一个元组构成的列表,元组包含两个实例对象。

过滤:

变量名 = session.query(模型类).filter(条件).all()

条件中常用运算符:

Python ORM框架之SQLAlchemy 的基础用法

多条件过滤:

排序:

变量名 = session.query(模型类).order_by(排序依据字段.desc()).all()     # desc 表示倒序,写 asc 或不写就是升序

统计个数:

变量名 = session.query(模型类).count()

切片:

变量名 = session.query(模型类).all()[1:3]

2.8 修改数据

变量名 = session.query(模型类).filter(条件).update({"字段":值})
# 不要忘记提交

2.9 删除数据

session.query(模型类).filter(条件).delete()

三、多表操作

下面的内容中,我将称定义了外键字段的模型类为被关联模型,另一个为关联模型。

3.1 一对多

创建模型:

外键定义在多的一方。

新增数据:

# 正向新增
变量名 = 被关联模型(字段=值,……,外键字段=关联模型(字段=值……))
session.add(变量名)

# 反向新增
变量名a = 关联模型(字段=值,……)
变量名a.backref的值 = [被关联模型的实例1,被关联模型的实例2……]
session.add(变量名a)

正向查询:

先获取被关联模型的实例,然后通过实例.外键获取关联对象。

反向查询:

先获取关联模型的实例,然后通过实例.backref的值获取被关联模型的实例对象。

3.2 多对多

创建模型:

新建中间表,只保存双方的对应关系即可。

在其中一方,定义 relationship:

关联模型类名称小写 = relationship("关联模型类的名称", secOndary='中间表模型类的名称小写', backref="用于反向查询的名称")    # 不是字段,不会在数据库中创建

新增数据:

在双方创建好数据后,直接在中间表中添加对应关系。

正向、反向查询:

与一对多模型一致。

到此这篇关于python orm框架之sqlalchemy 的基础用法的文章就介绍到这了,更多相关sqlalchemy 的用法内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!

需要了解更多python教程分享Python ORM框架之SQLAlchemy 的基础用法,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
author-avatar
手机用户2502858405
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有