`
huangyiiiiii
  • 浏览: 118584 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

强大的 sqlalchemy

    博客分类:
  • orm
阅读更多

sqlalchemy 的文档可谓典范,谁叫作者还开发着模板语言(myghtymako)呢,呵呵。其实 sqlalchemy 的文档就是用 myghty 写的。

不过系统复杂了,功能多了,再好的文档也会让人迷路。最近用了用 sqlalchemy ,对这一点感受颇深,故把临时想到的几个比较常用的功能摘录如下,提纲挈领,既为自己整理一下思路,也让新手一窥 sqlalchemy 的精华。

  1. Eager Loading
    Join,本是关系数据库中多么常见的操作,怎奈 django 的 orm 就是不支持,SQLObject 的做法也很不如人意。
  2. Association Object
    many-to-many 关系都是通过增加一个中间表来实现,映射到对象后,这个中间表就不需要我们再操心了,会隐式地进行处理。
    不过对于多个实体两两之间多对多关系,往往另外再增加一个关联对象会更方便。
    这样的例子其实也不少,比如:user-bookmark-tags、产品-元件-元件供应商(这是一次期末考试题目里面的 ;-)
  3. Deferred Column Loading
    比如文章表里面的 body 字段通常比较大,在获取文章列表时这个字段就不必取出来了。甚至如果你有某个字段存的是文件的话,这个功能就更加重要了。
    这本是个不起眼的小功能,不过上次看到 javaeye 中有一贴说到大名鼎鼎的 Hibernate 都对这个功能实现得这么痛苦后,我蓦然发现 sa 真的很 nb。呵呵,托了动态语言的福了吧。
  4. Mapping a Class with Table Inheritance
    如何把对象间继承关系映射到关系数据库,sqlalchemy 提供三种方式:
    single table inheritance 所有子类型都放在一个表中;
    concrete table inheritance 每一种子类型存在独立的表中;
    multiple table inheritance 父子类型都存在独立的表中,查询的时候进行连接;
    显然最后一种是冗余最少的,不过查询的时候要做一次连接操作,如何选择还是看具体情况了。
  5. Mapping a Class against Arbitary Selects
    将对象映射到任意的 select,其实也就是任意的 sql 子查询。
    这功能太强大了,有了这个后,我们就可以骄傲地宣称,(几乎)没有什么是 sqlalchemy 做不了的了!
  6. 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 中已有的实例,这样要是对旧实例做过什么还没保存的修改的话,就都没了。所以要慎用!
  7. Cascade rules
    最后这个也是很有用的功能,举个例子来说吧,user 和 article 有一对多的关系,现在删除一个 user,是否应该把相关的 article 也删了呢,要 article 还有其他的依赖关系呢?这些决定当然是要根据实际的需求来,而控制这些行为的方法就是通过 relation 的 cascade 参数,具体取值及其含义看文档去吧。

总滴来说,本文只是个提纲的作用,具体还得去看文档,看示例,看unittest。

最后还想说两句的就是,大家之所以选择 ORM ,主要原因是逃离 SQL,然而我感觉不能掌握 SQL 是不能(很好)掌握sqlalchemy的。至少要对关系数据库的这些概念了解,理解 SQL 就是理解关系数据库。只有这样才能利用sqlalchemy将关系数据库发挥到极致!

使用 sqlalchemy 的好处就是不用写 sql 了,屏蔽不同dbms之间SQL语法的区别,同时又让你在需要的时候能够利用到不同 DBMS 提供的一些独特特性,让你以对象的方式管理数据库访问代码,提高代码重用性!

分享到:
评论
1 楼 xlp223 2007-06-12  
sql是个基础,脱离它去谈orm,有如纸上谈兵。

相关推荐

    sqlalchemy documentation sqlalchemy 文档

    综上所述,SQLAlchemy不仅提供了强大的ORM功能,还具备丰富的SQL表达式语言支持,使得开发者能够灵活地处理各种数据库操作需求。通过上述教程和文档的学习,可以全面掌握SQLAlchemy的核心用法和技术细节。

    FlaskSQLAlchemy下载及安装

    SQLAlchemy是Python的一个强大的ORM(对象关系映射)库,能够将数据库操作转化为面向对象的编程方式。下面我们将详细讨论Flask-SQLAlchemy的下载、安装以及如何在Flask应用中进行集成。 ### 一、Flask-SQLAlchemy的...

    sqlalchemy

    SQLAlchemy是一个功能强大的Python库,用于与关系型数据库进行交互,其最突出的特点是具有对象关系映射(ORM)功能。它提供了完善的工具集,让开发者能够以面向对象的方式操作数据库,而不是写原始SQL代码,极大地...

    SQLAlchemy

    总的来说,SQLAlchemy是一个功能强大且灵活的库,它不仅解决了数据库访问的复杂性,还提供了高级抽象,以减少直接操作SQL带来的安全风险和代码复杂性。它是一个值得学习和使用的工具,特别适合那些需要与数据库频繁...

    sqlalchemy文档资料翻译

    它不仅提供了强大的ORM(对象关系映射)功能,还拥有独立于ORM之外的SQL表达式语言等功能。 - **核心组件**:SQLAlchemy中最为核心的两大组成部分是**ObjectRelationalMapper (ORM)** 和 **SQL Expression Language...

    Python库 | SQLAlchemy-1.4.0b1.tar.gz

    SQLAlchemy 是一个强大的 Python SQL 工具包和 ORM(对象关系映射)系统,它提供了对多种数据库引擎的全面支持,包括 PostgreSQL、MySQL、SQLite 和 Microsoft SQL Server 等。在 Python 中,SQLAlchemy 为开发者...

    sqlalchemy-utils, Sqlalchemy的各种实用程序函数和数据类型.zip

    Sqlalchemy-utils是一个强大的Python库,它是为SQLAlchemy这个流行的ORM(对象关系映射)框架提供额外功能和实用工具的扩展。SQLAlchemy是Python中的一个核心数据库接口,它允许开发者使用面向对象的方式来操作...

    PyPI 官网下载 | sqlalchemy_cockroachdb-1.3.0-py3-none-any.whl

    SQLAlchemy提供了一个强大的SQL构建器,支持动态SQL执行,并且可以与多种数据库系统兼容。 **CockroachDB** CockroachDB是一个分布式SQL数据库,设计目标是提供高度的可扩展性、强一致性以及生存能力。它基于...

    Python-awesomesqlalchemy系列SQLAlchemy相关工具集合

    SQLAlchemy是Python中的一款强大的对象关系映射(ORM)框架,它允许开发者使用Python类来操作数据库,极大地简化了数据库操作。这个`awesome-sqlalchemy`集合是针对SQLAlchemy的一个资源库,包含了各种与SQLAlchemy...

    SQLAlchemy最新权威详细教程

    SQLAlchemy 是一个功能强大且灵活的 Python 库,提供了一个统一的 Python 接口,能够对不同类型的数据库进行操作,而不需要修改原有的 Python 代码。SQLAlchemy 的主要优点是提供了一个高级的对象关系映射(Object-...

    Essential SQLAlchemy 2nd Edition

    **SQLAlchemy**是Python编程语言中的一个流行对象关系映射(ORM)库,它为开发者提供了在Python中操作数据库的强大工具。ORM允许开发者使用面向对象的编程方式与数据库进行交互,而无需直接编写SQL语句,极大地提高了...

    sqlalchemy 英文解读

    `SQLAlchemy`是Python编程语言中的一个流行ORM(对象关系映射)库,它为开发者提供了在Python中操作数据库的强大工具。ORM允许程序员使用面向对象的编程方式来处理数据库操作,而无需直接编写SQL语句,这使得代码...

    Python库 | sqlalchemy_graphql-1.2.tar.gz

    SQLAlchemy作为Python中最受欢迎的对象关系映射(ORM)库,为数据库操作提供了强大的支持。而GraphQL作为一种新兴的API设计语言,以其高效、灵活的数据查询能力,正逐渐成为现代Web应用开发的首选。当SQLAlchemy与...

    python-sqlalchemy帮助文档

    Python中的SQLAlchemy是一个强大的ORM(对象关系映射)库,它允许开发者使用Python类和对象来操作数据库。SQLAlchemy简化了数据库操作,使得在Python应用中处理SQL变得更加灵活和高效。下面将详细介绍SQLAlchemy的...

    SQLAlchemy-0.7.8

    SQLAlchemy是Python编程语言中的一款强大的对象关系映射(ORM)框架,它允许开发者使用Python对象来操作数据库,极大地简化了数据库操作。SQLAlchemy-0.7.8是该库的一个稳定版本,意味着它经过了充分的测试和验证,...

    SQLAlchemy 1.2.8

    SQLAlchemy是Python编程语言中的一款强大的SQL工具包和对象关系映射(ORM)框架,它为开发者提供了在Python中操作数据库的强大功能。SQLAlchemy 1.2.8是该库的一个稳定版本,提供了多种增强和改进,使得数据库交互...

    SQLAlchemy学习笔记1

    SQLAlchemy是Python中的一款强大的对象关系映射(ORM)库,它允许开发者使用Python类来定义数据库模式,并在这些类上执行SQL操作。这篇“SQLAlchemy学习笔记1”可能涉及了初学者入门的一些核心概念,包括数据库配置...

    sqlalchemy的基本操作大全

    SQLAlchemy 是一个强大的 Python 数据库 ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库,而无需直接编写 SQL 语句。ORM 的核心思想是将数据库中的表映射为 Python 类,表中的行映射为类的...

Global site tag (gtag.js) - Google Analytics