sqlalchemy 的文档可谓典范,谁叫作者还开发着模板语言(myghty、mako)呢,呵呵。其实 sqlalchemy 的文档就是用 myghty 写的。
不过系统复杂了,功能多了,再好的文档也会让人迷路。最近用了用 sqlalchemy ,对这一点感受颇深,故把临时想到的几个比较常用的功能摘录如下,提纲挈领,既为自己整理一下思路,也让新手一窥 sqlalchemy 的精华。
- Eager Loading
Join,本是关系数据库中多么常见的操作,怎奈 django 的 orm 就是不支持,SQLObject 的做法也很不如人意。
- Association Object
many-to-many 关系都是通过增加一个中间表来实现,映射到对象后,这个中间表就不需要我们再操心了,会隐式地进行处理。
不过对于多个实体两两之间多对多关系,往往另外再增加一个关联对象会更方便。
这样的例子其实也不少,比如:user-bookmark-tags、产品-元件-元件供应商(这是一次期末考试题目里面的 ;-)
- Deferred Column Loading
比如文章表里面的 body 字段通常比较大,在获取文章列表时这个字段就不必取出来了。甚至如果你有某个字段存的是文件的话,这个功能就更加重要了。
这本是个不起眼的小功能,不过上次看到 javaeye 中有一贴说到大名鼎鼎的 Hibernate 都对这个功能实现得这么痛苦后,我蓦然发现 sa 真的很 nb。呵呵,托了动态语言的福了吧。
- Mapping a Class with Table Inheritance
如何把对象间继承关系映射到关系数据库,sqlalchemy 提供三种方式:
single table inheritance 所有子类型都放在一个表中;
concrete table inheritance 每一种子类型存在独立的表中;
multiple table inheritance 父子类型都存在独立的表中,查询的时候进行连接;
显然最后一种是冗余最少的,不过查询的时候要做一次连接操作,如何选择还是看具体情况了。
- Mapping a Class against Arbitary Selects
将对象映射到任意的 select,其实也就是任意的 sql 子查询。
这功能太强大了,有了这个后,我们就可以骄傲地宣称,(几乎)没有什么是 sqlalchemy 做不了的了!
- Identity Map
session 在 sqlalchemy 中是一个非常重要的概念,session 跟踪对象的修改情况,跟踪对象之间的关联,智能判断数据库操作执行的顺序等等。
Identity Map 是 session 中一个容易让人掉入陷阱的概念,你可以把它想象成一个以数据表主键为key的cache。每次从数据库查询后,如果 sqlalchemy 发现 Identity Map 中已经有了相同主键的实例,那就不会重新生成实例了。因为如果存在多个实例会带来许多问题,比如多个实例分别修改并保存时就会产生混乱。
偶尔 Identity Map 也会产生一些意想不到的行为,比如 ticket 458 ,不过理解了 Identity Map 的机理后,也就没什么问题了。
值得一提的是,Mapper Options 有一个 always_refresh 参数,如果把它设为True,则对该 mapper 的任何查询操作都会自动使用从数据库中查询到的数据覆盖 Identity Map 中已有的实例,这样要是对旧实例做过什么还没保存的修改的话,就都没了。所以要慎用!
- Cascade rules
最后这个也是很有用的功能,举个例子来说吧,user 和 article 有一对多的关系,现在删除一个 user,是否应该把相关的 article 也删了呢,要 article 还有其他的依赖关系呢?这些决定当然是要根据实际的需求来,而控制这些行为的方法就是通过 relation 的 cascade 参数,具体取值及其含义看文档去吧。
总滴来说,本文只是个提纲的作用,具体还得去看文档,看示例,看unittest。
最后还想说两句的就是,大家之所以选择 ORM ,主要原因是逃离 SQL,然而我感觉不能掌握 SQL 是不能(很好)掌握sqlalchemy的。至少要对关系数据库的这些概念了解,理解 SQL 就是理解关系数据库。只有这样才能利用sqlalchemy将关系数据库发挥到极致!
使用 sqlalchemy 的好处就是不用写 sql 了,屏蔽不同dbms之间SQL语法的区别,同时又让你在需要的时候能够利用到不同 DBMS 提供的一些独特特性,让你以对象的方式管理数据库访问代码,提高代码重用性!
分享到:
相关推荐
它允许您使用功能强大SQLAlchemy Core表达式语言进行查询,并提供对PostgreSQL,MySQL和SQL数据库的支持。数据库为您提供对一系列数据库的简单异步支持。 它使您可以使用功能强大SQLAlchemy Core表达式语言进行查询...
一、SQLAlchemy简介 1.1、SQLAlchemy是什么? sqlalchemy是一个python语言实现的的针对关系型数据库的orm库...虽然你使用的框架中已经内置了ORM,但是希望添加更强大的报表功能,请选用Core。 如果你想在一个一模式为中
SQLAlchemy是一个强大的关系数据库框架,支持一些数据库后端。提供高级的ORM和底层访问数据库的本地SQL功能。 和其他扩展一样,通过pip安装Flask-SQLAlchemy: (venv) $ pip install flask-sqlalchemy 在Flask-...
在使用 SQLAlchemy 时,那些看似很小的选择可能对这种...它是一个成熟的 ORM 工具,增加了模型关系、强大的查询构造范式、简单的序列化等优点。然而,它的易用性使得人们很容易忘记其背后发生了什么。使用 SQLAlchemy
SQLAlchemy 是一个非常强大的ORM和数据库工具,但是它庞大的文档和复杂的功能总是让很 多人望而生畏。而Django的ORM相对来说就让很多人觉得简单实用。 事实上,SQLAlchemy其实也没有那么复杂,光使用它一些比较高级...
带有金字塔和SQLAlchemy的数据驱动Web应用程序课程Talk Python的Pyramid和SQLAlchemy数据驱动Web应用程序的演示和讲义。课程总结Python真正闪耀的领域之一是构建干净且功能强大的Web应用程序。 一旦您了解了语言的...
Flask-Potion 是一个强大的扩展用来构建 RESTful JSON APIs。特性包括:数据校验、模型资源、路由、关联、对象权限、过滤、排序、分页、信号和自动化 API schema 生成。Potion 设计用于处理 SQLAlchemy 和 peewee ...
后台管理:使用Flask-Admin管理后台,功能强大,简单易用 主要依赖的 Flask 扩展插件 Flask-SQLAlchemy 数据库模型 Flask-Admin 后台管理 Flask-Login 用户登录 DEMO http://blog.adisonhyh.com/ 部署 本地环境 ...
SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy提供了高层ORM,也提供了使用数据库原生SQL的低层功能。 学习了Flask-SQLAlchemy下MySQL的配置和增删改查,供初学者作为参考。(python3+...
Kook 是一个强大的配方库存存储和共享 SaaS。 它建立在 Pyramid 框架上,并且仅在开发过程中才开源。 主要特征: 配方的多个版本,按用户评分排序 有菜肴和他们的食谱 成分测量转换系统 食谱烹饪时间通过烹饪步骤...
它允许您使用功能强大的SQLAlchemy Core表达式语言进行查询,并为PostgreSQL,MySQL和SQLite提供支持。数据库适合与任何异步Web框架集成,例如Starlette,Sanic,Responder,Quart,aiohttp,FastAPI或Bocadillo。
长颈瓶 flask-authz是的授权中间件,它基于 。 安装 pip install flask-authz 或克隆仓库: ...$ python setup.py install 模块用法: from flask import Flask from flask_authz import CasbinEnforcer ...
启发自Django-Admin,并且拥有不逊色于Django-Admin的强大功能. 关键特性 性能极高:基于FastAPI, 可享受FastAPI的全部优势。 效率更快:完善的编码类型提示, 代码可重用性更高. 支持异步和同步混合编写: ORM基于...
Castaway是一个简单而强大的船只租赁平台,允许用户查找附近的船只清单以租用一定天数。 它利用Google的位置服务和API来增强搜索和地图功能。 演示版 这是一个正在运行的现场演示: 依存关系 后端 烧瓶 SQL炼金术 ...
TurboGears 借助WebOb,SQLAlchemy,Genshi和Repoze等组件,与其他现有框架相比,您可以轻松地开发需要数据库连接的应用程序。github CubicWeb 它使用多维数据集代替使用单独的视图和模型。在一些配置文件,Web...
-使用Flask创建更大的Web应用程序的最佳实践方法,旨在使Flask感觉像Django一样强大(甚至更多)。 这是世界上最好的惊人程序 要在现实世界中的示例中看到这一点,请查看我的其他项目或 这提供了什么: 可安装的...
功能强大,简单易用主要依赖的Flask扩展插件Flask-SQLAlchemy数据库模型Flask-Admin后台管理Flask-Login用户登录演示部署本地环境本地环境通过pip + virtualenv方式进行部署。安装依赖:使用requirements/common.txt...
它具有简洁易懂的语法,丰富的库和框架,以及强大的表达能力。在本教程中,我们将为您介绍Python的基础语法、数据类型、控制结构、函数、模块和面向对象编程等概念。 MySQL数据库基础 MySQL是一款流行的关系型数据库...
启发自Django-Admin,并且拥有不逊色于Django-Admin的强大功能。是一个基于fastapi+amis开发的高性能并且高效率 web-admin 框架,使用 Python 3.7+ 并基于标准的 Python 类型提示. fastapi-amis-admin开发的初衷是...
它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全,它的特性有:沙箱中执行,强大的 HTML 自动转义系统保护系统免受 XSS,模板继承,及时编译最优的 python 代码,可选提前编译模板的时间,易于调试...