Read Sean

Read me, read Sean.
posts - 508, comments - 655, trackbacks - 9, articles - 4

[Pylons] SQLAlchemy起步 - I. Engine API

Posted on 2009-01-26 20:46 laogao 阅读(2469) 评论(1)  编辑  收藏 所属分类: On Python

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能给我们带来更大的灵活性,通常也更方便、更安全。

Feedback

# re: [Pylons] SQLAlchemy起步 - I. Engine API[未登录]  回复  更多评论   

2011-02-27 14:26 by 小白
谢谢了,

只有注册用户登录后才能发表评论。


网站导航: