zoukankan      html  css  js  c++  java
  • 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) 的使用。

  • 相关阅读:
    WIN平台下ASE使用资源文件创建ASE服务
    C#高级编程笔记(三)
    C#高级编程笔记(四)
    高质量的HTML+CSS。
    C#高级编程笔记(二)
    编写高质量代码(JavaScript篇)
    C#高级编程笔记(一)
    开始博客+生活+学习
    巴中故里
    纱丽
  • 原文地址:https://www.cnblogs.com/chidao/p/12958070.html
Copyright © 2011-2022 走看看