web.py 數(shù)據(jù)庫(kù)操作

2022-04-24 18:21 更新

注意: 在你開(kāi)始使用數(shù)據(jù)庫(kù)之前,確保你已經(jīng)安裝了合適的數(shù)據(jù)庫(kù)訪問(wèn)庫(kù)。比如對(duì)于MySQL數(shù)據(jù)庫(kù),使用 pymysql,對(duì)于Postgres數(shù)據(jù)庫(kù)使用psycopg2。

首先你需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)對(duì)象。

db = web.database(dbn='postgres', user='username', pw='password', db='dbname')

(根據(jù)需要修改這里 – 尤其是username 、 password 、 dbname – 。 MySQL用戶(hù)還需要把 dbn 定義改為 mysql。)

這就是所有你需要做的 – web.py將會(huì)自動(dòng)處理與數(shù)據(jù)庫(kù)的連接和斷開(kāi)。

使用的的數(shù)據(jù)庫(kù)引擎管理工具,在你的庫(kù)中創(chuàng)建一個(gè)簡(jiǎn)單的表:

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'); 我們回來(lái)繼續(xù)編輯 code.py ,把 index.GET 改成下面的樣子,替換整個(gè)函數(shù):

    def GET(self):
        todos = db.select('todo')
        return render.index(todos)

然后把URL列表改回來(lái),只保留 /:

'/', 'index',

像這樣編輯并替換 index.html 的全部?jī)?nèi)容:

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

再訪問(wèn)你的網(wǎng)站,然后你可以看到你的todo item: “Learn web.py”。恭喜你!你已經(jīng)完整地寫(xiě)好了一個(gè)可以從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)的程序?,F(xiàn)在讓我們同樣再寫(xiě)一個(gè)可以把數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)的程序。

在 index.html尾部添加:

<form method="post" action="add">
<p><input type="text" name="title" /> <input type="submit" value="Add" /></p>
</form>

然后把你的URL列表改為:

'/', 'index',
'/add', 'add'

(你必須要非常小心那些逗號(hào)。如果你省略他們,Python會(huì)把所有字符串連接起來(lái),變成 '/index/addadd')

現(xiàn)在添加另一個(gè)類(lèi):

class add:
    def POST(self):
        i = web.input()
        n = db.insert('todo', title=i.title)
        raise web.seeother('/')

(注意現(xiàn)在我們正在使用 POST)

web.input 可以讓你訪問(wèn)用戶(hù)通過(guò)form提交的任何數(shù)據(jù)。

注意: 如果要訪問(wèn)多個(gè)相同名字的字段,請(qǐng)使用list的格式(比如:一串name=”name”的多選框):

post_data=web.input(name=[])

db.insert 把數(shù)據(jù)插入數(shù)據(jù)表 todo ,然后把新的行號(hào)返回給你。 seeother 把用戶(hù)重定向到指定的URL。

一些快速補(bǔ)充說(shuō)明: db.update 與 db.insert 差不多,除了它返回的行號(hào)是直接從sql語(yǔ)句里面提取的(WHERE ID=2)。

web.input、 db.query已經(jīng)其他web.py中的函數(shù)返回”Storage objects”,這些東西就像字典,你除了可以 d['foo']之外,你還可以 d.foo。這可以讓代碼更加干凈。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)