SQLAlchemy

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

SQLAlchemy是一款用Python语言编写的广受好评的数据库工具集,并且实现了对象关系映射(ORM)功能,同时提供了一套无需编写SQL  语句便能执行数据库命令的通用接口。

什么SQLAlchemy是一款好的ORM工具?

SQLAlchmey不仅仅是只包含了ORM—它也提供了另一组件(SQLAlchemy Core)来执行抽象于具体数据库(如PostgreSQL,SQLite等)实现的数据库操作。在某些方面来说,ORM只是一种相对于Core来说自动化执行创建,读取,更新和删除操作的额外功能而已。

SQLAlchemy可以脱离ORM特性而使用。任何一个项目都可以选择是只使用SQLAlchmey Core还是既有SQLAlchmey Core又包含ORM。下图显示了一些不同应用及后端数据库所使用的配置信息,这些配置信息可以依据你所编写的应用类型而改变:

Picture1.png

许多开发人员喜欢使用SQLAlchemy的原因是它允许他们在编写Python代码时能够从数据库模式映射到应用程序的Python对象,而无需再编写相关的创建,查询数据库操作SQL 语句。这种映射关系允许SQLAlchemy去操作底层的数据库,开发者也可以直接通过Python中的对象来完成工作。

SQLAlchemy相比原生的SQL如何?

下图是从一份开源项目中截取的部分SQLAlchemy模型定义,该项目使用Flask框架以及Flask-SQLAlchemy工具:

Picture2.png

SQLAlchemy负责表的创建过程,否则我们就需要编写类似如下的SQL语句来完成创建操作了:

Picture3.png

通过在Python代码中使用SQLAlchemy,可以在一行代码中获取到所有的记录contacts = Contact.query.all() 而不必使用 SELECT * FROM contacts 这在语法上看起来似乎差别不大,但是对于Python开发者来说当面对多个表或者查询特定字段时使用SQLAlchemy往往会更加便捷和简单。另外,SQLAlchemy屏蔽了底层数据库的实现,比如SQLiteMySQLPostgreSQL等。

Web框架使用SQLAlchemy

任何需要连接后端数据库的程序都可以使用SQLAlchemy库。但如果你使用FlaskBottle或其他web框架来编写web程序时最好看下以下扩展。它们提供了一些代码以及一些帮助工具可以减少程序使用SQLAlchemy库时所编写的代码量。

·      Flask中使用SQLAlchemy可以通过Flask-SQLAlchemy扩展来作为数据库ORM工具;

·      Bottle中使用bottle-sqlalchemy扩展可以更好地拟合标准SQLAlchemy库和Bottle框架,但是以我的实际经验来说,该扩展与Flask-SQLAlchemy相比并没有提供很多的帮助工具;

·      Pyramid使用alchemy scaffold来更容易地将SQLAlchemy融入Pyramid web应用之中;

·      虽然Django仍然没有轻易使用SQLAlchemy替换默认Django后端ORM工具的方法,但是仍然有很多在Django项目中使用SQLAlchemy的例子;

·      Morepath通过自带的more.transaction模块提供了简易使用SQLAlchemy的方法,同时也有一个morepath-sqlalchemy demo用来展示实际的例子;

SQLAlchemy

熟悉SQLAlchemy最好的方式就是自己编写一个数据库驱动的程序。下面的资源可以在你遇到困难时提供良好的帮助:

·        在《Architecture of Open Source Applications book on SQLAlchemy》一书中有一完整章节用来描述SQLAlchemy,它的内容非常详细,也很值得一读;

·        SQLAlchemy cheatsheet有非常多的查询,更新等操作的实例,也有其他通过CoreORM进行常用操作的例子;

·        10 reasons to love SQLAlchemy提供一些SQLAlchemy的文档以及如何在Python程序中使用它的例子;

·        Large web apps in Python: A good architecture本文在代码基础之上提出了一些问题,譬如如何存放逻辑代码,如何自动化测试等;每一个讨论的主题都是在SQLAlchemy基础上提出的;

·        SQLAlchemy and Django解释了一个开发团队如何使用Django ORM来完成标准查询而使用SQLAlchemy来完成更高级的查询;

·        SQLAlchemy and data access in PythonSQLAlchemy的创始者写的一篇关于该项目历史以及发展历程的概述;

·        大多数Flask开发者使用SQLAlchemy,如果你不熟悉该工具,那么你就会经常想flushcommit的区别是什么?这对你编写项目来说非常重要;

·        SQLAlchemy in batches展示了一款iOS项目使用SQLAlchemy来生成玩家列表的过程,它们提供了一些使用SQLAlchemy的建议;

SQLAlchemy与其他ORMs

SQLAlchemy只是许多ORMs工具之一,下面列出一些其他的开源项目和文章可以更好地对比它们之间的差异:

·      SQLAlchemy vs Other ORMs 提供了一份详细对比说明;

·      如果你对SQLAlchemyDjango ORM之间的区别感兴趣,我推荐你读SQLAlchemy and You

·      PythonORMSleepy用不同的ORMs工具实现同一个Flask项目:SQLAlchemyPeeweeMongoEnginestdnet以及 PonyORM。通过读代码可以对理解不同的实现方式有所帮助;

·      Quora提供了依据不同开发者经验针对which is better and why: Django ORM or SQLALchemy 问题的答案


英文原文:https://www.fullstackpython.com/sqlalchemy.html
译者:lovekk
 

2月15日11:00到13:00网站停机维护,13:00前恢复