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

python

数据库

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 【数据库】 的全部内容, 来源链接: utcz.com/z/387910.html

回到顶部