[Pylons] SQLAlchemy起步 - III. SQL Expression Language


在介绍SQLAlchemy最核心最有价值的ORM部分之前,我们再简单过一遍SQLAlchemy提供的SQL Expression Language用法,就从最基本的CRUD来举例说明吧(接着上一篇的示例):

 1  from  sqlalchemy  import  select,update,delete
 2 
 3  conn  =  engine.connect()
 4  book_ins  =  book_table.insert(values = dict(title = u ' Groovy in Action ' ))
 5  author_ins  =  author_table.insert(values = dict(name = u ' Andrew Glover ' ))
 6  conn.execute(book_ins)
 7  conn.execute(author_ins)
 8  book  =  conn.execute(select([book_table], book_table.c.title.like(u ' Groovy% ' ))).fetchone()
 9  author  =  conn.execute(select([author_table])).fetchone()
10  bookauthor_ins  =  bookauthor_table.insert(values = dict(book_id = book[0],author_id = author[0]))
11  conn.execute(bookauthor_ins)
12  conn.execute(update(book_table,book_table.c.title == u ' Groovy in Action ' ), title = u ' Groovy in Action (中文版) ' )
13  conn.execute(delete(bookauthor_table))
14  conn.close()

简单说明一下代码逻辑:
首先从engine建立连接,然后做两个insert动作,分别insert一条book记录(title为'Groovy in Action')和一条author记录(name为'Andrew Glover'),这之后分别再做两次select,得到刚insert的这两条记录,其中book记录的select用到了过滤条件,相当于"WHERE book.title like 'Groovy%'",然后构建一条新的insert语句,用于insert一条bookauthor关系记录,接下来,做一次update,将book.title为'Groovy in Action'的更新为'Groovy in Action (中文版)',最后,在关闭连接之前,做一次delete,删除bookauthor中的记录。

在指定WHERE条件时,.c是.columns的简写,所以book_table.c.title指代的就是book表的title列。更高级的用法是采用"&"、"|"、"!"三个符号,分别表示AND、OR和NOT,加上必要的"("和")"实现复杂的条件定义。由于传递给select()的第一个参数是个list,所以你应该已经猜到了,我们也可以多张表做关联查询。

你可能感兴趣的:([Pylons] SQLAlchemy起步 - III. SQL Expression Language)