Python web 框架:web.py 【数据库】

数据库

Web.py 更多关于数据库的操作:http://webpy.org/cookbook/index.zh-cn

注意:在你开始连接数据库之前,请先安装正确的数据库驱动。比如 MySQLdb、psycopg2。如果需要尝试连接 池(database pool)功能,还得装下DBUtils。这几个模块都可以通过easy_install 或者 pip 来安装。

连接数据库:

1 import web
2 db = web.database(dbn=postgres, db=mydata, user=dbuser, pw=‘‘)

 

操作 数据库 示例

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 by
results = db.select(mytable, order="post_date DESC")
# group
results = db.select(mytable, group="color")
# limit
results = db.select(mytable, limit=10)
# offset
results = db.select(mytable, offset=10)


更新
db.update(mytable, where="id = 10", value1 = "foo")


删除
db.delete(mytable, where="id=10")


复杂查询
# count
results = db.query("SELECT COUNT(*) AS total_users FROM users")
print results[0].total_users
# join
results = 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})


多数据库操作 (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)


事务
t = db.transaction()
try:
    db.insert(person, name=foo)
    db.insert(person, name=bar)
except:
    t.rollback()
    raise
else:
    t.commit()

# Python 2.5+ 可以用with
from __future__ import with_statement
with db.transaction():
    db.insert(person, name=foo)
    db.insert(person, name=bar)

 

现在,在数据库里创建一个简单的表:

CREATE TABLE todo (
  id serial primary key,
  title text,
  created timestamp default now(),
  done boolean default f
);
 
 
/* 初始化一行 */
INSERT INTO todo (title) VALUES (Learn web.py);

回到 code.py,修改GET 方法如下:

1 def GET(self):
2     todos = db.select(todo)
3     print render.index(todos)

修改urls 变量:

1 urls = (
2     /, index)

重新编辑index.html 文件如下:

1 $def with (todos)
2 <ul>
3 $for todo in todos:
4     <li id="t$todo.id">$todo.title</li>
5 </ul>

 

现在,可以访问”/“,如果显示”Learn web.py“,则祝贺你成功了!

 

现在,再让我们看看如何向数据库写入。

在index.html 文件的尾部添加如下内容:

1 <form method="post" action="add">
2    <p>
3        <input type="text" name="title" />
4        <input type="submit" value="Add" />
5    </p>
6 </form>

修改code.py 文件的urls 变量如下:

1 urls = (
2     /, index,
3     /add, add
4 )

 

在code.py 里添加一个类:

1 class add:
2     def POST(self):
3         i = web.input()
4         n = db.insert(todo, title=i.title)
5         web.seeother(/)

 

web.input 使你能够方便地访问用户通过表单提交上来的变量。db.insert 用于向数据库的 “todo” 表插入数据,并且返回新插入行的ID。web.seeother 用于重转向到”/“。

提示:对于数据库的操作,还有db.transact(), db.commit(), db.rollback(),db.update()。

在web.py 里,还有web.input,web.query 和其它的函数,返回”Storage objects”,可以像字典型类(dictionaries) 的使用。

 

Python web 框架:web.py 【数据库】

上一篇:MYSQL创建外键遇见错误


下一篇:关于MySQL中InnoDB引擎的一些理解