原文:http://chenxiaoyu.org/blog/archives/226 官网地址:http://webpy.org/ web.py是一个小巧灵活的框架,最新稳定版是0.33。这里不介绍web开发部分,介绍下关于数据库的相关操作。 很多pyer一开始都喜欢自己封装数据库操作类,本人亦如此。不过后来通过
原文:http://chenxiaoyu.org/blog/archives/226
官网地址:http://webpy.org/
web.py是一个小巧灵活的框架,最新稳定版是0.33。这里不介绍web开发部分,介绍下关于数据库的相关操作。
很多pyer一开始都喜欢自己封装数据库操作类,本人亦如此。不过后来通过观摩web.py的源码,发现其数据库操作部分相当紧凑实用。推荐懒人可以尝试一下。
废话不多,先来安装,有两种方式:
1. easy_install方式,如果木有此工具,可以参考:http://chenxiaoyu.org/blog/archives/23
easy_install web.py
2. 下载源码编译。地址: http://webpy.org/static/web.py-0.33.tar.gz ,解压后执行:
python setup.py install
web.py安装算到此结束,如果想使用其中的db功能,还得借助与相应数据库操作模块,比如mysqldb、psycopg2。如果需要尝试连接池(database pool)功能,还得装下dbutils。这几个模块都可以通过easy_install来安装。
下面开始使用吧!
1. 导入模块,定义数据库连接db。
import webdb = web.database(dbn='postgres', db='mydata', user='dbuser', pw='')
2. select 查询
# 查询表entries = db.select('mytable')# where 条件myvar = dict(name=bob)results = db.select('mytable', myvar, where=name = $name)results = db.select('mytable', where=id>100)# 查询具体列results = db.select('mytable', what=id,name)# order byresults = db.select('mytable', order=post_date desc)# groupresults = db.select('mytable', group=color)# limitresults = db.select('mytable', limit=10)# offsetresults = db.select('mytable', offset=10)
3. 更新
db.update('mytable', where=id = 10, value1 = foo)
4. 删除
db.delete('mytable', where=id=10)
5. 复杂查询
# countresults = db.query(select count(*) as total_users from users)print results[0].total_users# joinresults = db.query(select * from entries join users where entries.author_id = users.id)# 防止sql注入可以这么干results = db.query(select * from users where id=$id, vars={'id':10})
6 多数据库操作 (web.py大于0.3)
db1 = web.database(dbn='mysql', db='dbname1', user='foo')db2 = web.database(dbn='mysql', db='dbname2', user='foo')print db1.select('foo', where='id=1')print db2.select('bar', where='id=5')
7. 事务
t = db.transaction()try: db.insert('person', name='foo') db.insert('person', name='bar')except: t.rollback() raiseelse: t.commit()# python 2.5+ 可以用withfrom __future__ import with_statementwith db.transaction(): db.insert('person', name='foo') db.insert('person', name='bar')