SQLAlchemy的核心有两个完全不同的功能,一个在另一个之上工作。一个是 SQL语言构造器 ,另一个是 ORM 。SQL语言构造器允许调用 ClauseElements 来构造SQL表达式。这些 ClauseElements 可以在编译成字符串并绑定到数据库后用于执行,并返回一个叫做 ResultProxy 的对象,类似于一个结果集对象,但是更象dbapi高版本的 cursor 对象。
ORM是建立在SQL语言构造器之上的工具集,用于将Python对象映射到数据库的行,提供了一系列接口用于从数据库中存取对象(行)。在ORM 工作时,在底层调用SQL语言构造器的API,这些通用的操作有些许的不同。不同的是,你不再使用行,而是使用自定义类的对象来操作。另外,数据库的查询 方式也不同,ORM的可以生成大多数的SQL查询,除此之外还可以在类中定义更多操作。
SA功能强大,无与伦比,只是有两个混合在一起的方法有些复杂。有效的使用SA的方法是先了解这两种不同的工具集,这是两个不同的概念,而大家常常 混交SQL语言构造器和ORM。关键的不同是,使用cursor形式的结果集时使用的是SQL语言构造器;而使用类实例进行管理时使用的是ORM。
本指南首先介绍SQL语言构造器,首先需要声明的数据库信息叫做 table metadata 。本指南包含了一些SQL构造的例子,包括如何有效的使用SQL语言构造器的例子。
连接
在这个教程中我们将使用SQLite内存数据库,这很方便做测试。连接数据库使用create_engine():
>>> from sqlalchemy import create_engine >>> engine = create_engine('sqlite:///:memory:', echo=True)
echo 标志是设置日志,由python标准的logging模块完成。设置了echo=True,我们可以看到所有产生SQL的过程。如果你不想太多的输出,可以设置echo=False。
create_engine()的返回值是一个Engine类的实例,这个实例将作为与数据库交互的接口。当第一次执行Engine.execute() 或Engine.connect(),Engine与数据库建立一个DBAPI连接。
Lazy Connecting:当create_engine()返回Engine实例时,并没有建立连接。
定义和创建表
SQL语言构造器构造表达式大多数情况下是针对列。