[Pylons] SQLAlchemy起步 - I. Engine API


ORM是个大话题,大到可能好几本书都说不完。SQLAlchemy,别看它刚出到0.5.2,已然是Python世界ORM的事实标准,受到众多开发者和无数框架的青睐。

如果之前没有或很少接触SQLAlchemy,那么学习Pylons可能有相当一部分时间都会花在SQLAlchemy上。通常,人们选择Pylons或者TurboGears而不是Django,SQLAlchemy在这些决定的背后有着很重的分量。作为Pylons学习笔记的一部分,接下来我将分4篇随笔介绍SQLAlchemy,分别是Engine API、Schema Management (MetaData/Types)、SQL Expression Language和Object Relational Mapper。此文为第1篇,重点介绍Engine API。

类似Java的JDBC,Python也有一个类似的数据库访问接口规范,那就是DB-API(目前是2.0),不同的常见RDBMS都有符合DB-API标准的Python库,比如PostgreSQL有psycopg2,Oracle有cx_Oracle等。有了这个基础,SQLAlchemy也就得以方便的通过DB-API连接不同的数据库。

以PostgreSQL为例,通过SQLAlchemy的Engine API访问数据库的代码可以这样来写:
 1  from  sqlalchemy.engine  import  create_engine
 2 
 3  engine  =  create_engine( ' postgres://user:pass@localhost/testdb ' )
 4  connection  =  engine.connect()
 5  connection.execute(
 6       """
 7      CREATE TABLE book
 8      (
 9        id serial NOT NULL,
10       title character varying(30) NOT NULL,
11       CONSTRAINT pk_book PRIMARY KEY (id)
12      );
13     """
14  )
15  connection.execute(
16       """
17      INSERT INTO book (title) VALUES (%s);
18       """ ,
19       " The Art of UNIX Programming "
20  )
21  rs  =  connection.execute( " SELECT title FROM book " )
22  for  row  in  rs:
23       print   " Book Title:  " , row[ ' title ' ]
24  connection.close()

基本步骤就是create_engine、connect、execute和close,没有很特别的地方,不过SQLAlchemy的Engine API,并不是简单的DBAPI调用,而是包装了其他内容,如数据库连接池,我们可以在create_engine的时候指定连接池参数和其他额外配置,类似这样:
engine  =  create_engine( ' postgres://user:pass@localhost/testdb ' , pool_size = 10, convert_unicode=True )

类似Spring的JdbcTemplate,更多的时候,统一使用SQLAlchemy的Engine API而不是DB-API能给我们带来更大的灵活性,通常也更方便、更安全。

你可能感兴趣的:([Pylons] SQLAlchemy起步 - I. Engine API)