?本來是計劃跟著learn python the hard way ,繼續(xù)下去, 不過中途補(bǔ)充一下,網(wǎng)頁的基礎(chǔ)知識吧,也不耽擱了。
[摘錄]:用來記下,之前不理解的 地方?
? 1.web.py ?引入數(shù)據(jù)庫的路徑問題。 ? --已解決
?2、index.html調(diào)用參數(shù),數(shù)據(jù)庫中,怎么調(diào)用? ? --已解決
數(shù)據(jù)庫的學(xué)習(xí)
? 只是知道一些數(shù)據(jù)庫的知識, 一步步來吧,實戰(zhàn)中學(xué)習(xí)呢。
?為什么要學(xué)數(shù)據(jù)庫?
? ? 上節(jié)中我們調(diào)用了move字典,但是如果我們是個網(wǎng)站,這些數(shù)據(jù),如果只是字典的話,恐怕沒法吧, 下面我們就要用數(shù)據(jù)庫實現(xiàn)上篇的例子。
?為什么要學(xué)習(xí)?
? ? ?是不是又要多學(xué)東西呢? ? 呵呵,世界就是這樣的,一句learn python the ?hard way的話,
不管是什么原因,你一定要堅持下去,放棄的話,你會失去達(dá)到這個程度的機(jī)會。
SQLlite3的學(xué)習(xí)
(1)是不是從基礎(chǔ)再學(xué)習(xí), 還是先簡單的解決。
(2)不如看看我們要解決的問題是什么?
? ? ? ? ?解決上一課的問題,那需要很復(fù)雜嗎? 不需要
? ? ? ? 那就簡單的解決, 以后如果在遇到,在回頭學(xué)啊。主力是解決python.?
SQLite3的基礎(chǔ)
? ? sqlite3的基礎(chǔ)是sql結(jié)構(gòu)數(shù)據(jù)庫,大致百度一下,看了看,不屬于sql服務(wù)器,至于細(xì)節(jié)目前我們暫時擱置, 先看看SQL數(shù)據(jù)庫的知識, 還是老地方w3school? ? ? ?
什么是數(shù)據(jù)庫?
? ? ?
這個電子表格,名字叫 python2015web, 表1叫電影庫,表2叫讀者庫, ? ? ? ? ? ? ? ? ? ? ? ? ? 對應(yīng)sql, python2015web就是數(shù)據(jù)庫, 電影庫就是數(shù)據(jù)庫表。
? ?雖然上面是電子表格,但是數(shù)據(jù)庫表就是這個樣子的。
? ? ?不同的是,電子表格,基本是你手填上去的,而這里大多數(shù)是用命令。
? ?sql把命令分為兩種,一種是直接操作電子表格內(nèi),一種是建立表和文件名的。
? ? 操作電子表格的有:
? ? ? ?select 查詢數(shù)據(jù)庫并獲得數(shù)據(jù)。
? ? ? ?update 更新數(shù)據(jù)庫的數(shù)據(jù)。
? ? ? ?insert into : ?插入數(shù)據(jù)庫的數(shù)據(jù)
? ? ? delete : 刪除數(shù)據(jù)庫的數(shù)據(jù)。
? 另一種:
? ? ? ?create ?database ? ,建立數(shù)據(jù)庫
? ? ? ?alter ?database , ?修改數(shù)據(jù)庫
? ? ? ?create ?table ?,建立數(shù)據(jù)庫表
? ? ? ?alter ?table , 修改數(shù)據(jù)庫表
? ? ? ?drop ?table , ?刪除數(shù)據(jù)庫
? ? ? ? create index , 創(chuàng)建索引
? ? ? ?drop ?index, ? 刪除索引?
?數(shù)據(jù)庫的一些小知識:
1: ?select 列名, select * from table
2: ? sql 用單引號圍繞文本值,如果是數(shù)值,不用單引號。
3: ?where?
? ? ? ? 有條件選取數(shù)據(jù)。
? ? ? select * from 數(shù)據(jù)庫表 where 'city' = 'beijjing';
pyton中如何運(yùn)用
?(1)首先在sqllite3 建立我們的數(shù)據(jù)庫。
? (venv)lixiang gothonweb $ sqlite3 movesite.db
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> create table move('id','name','author','year','nation');
sqlite> select * from move;
sqlite> insert into move values(1,'哆啦A夢','藤子F不二雄',2014,'日本');
sqlite> insert into move values(1,'海洋之歌','湯姆摩爾',2014,'法國');
sqlite> select * from move;
1|哆啦A夢|藤子F不二雄|2014|日本
1|海洋之歌|湯姆摩爾|2014|法國
sqlite>.quit
? ? 是不是很簡單啊。
(2)開始數(shù)據(jù)庫制作網(wǎng)頁了。
? ? ? ? ?修改web.py 文件
importweb?
urls = ('/','Index')
db = web.database(dbn='sqlite',db='../movesite.db')
app = web.application(urls,globals())
render = web.template.render('templates/')
class ?Index:
def GET(self):
movies = db.select('move')
return render.index(movies)
if__name__ =='__main__':
app.run()
class 'sqlite3.OperationalError' , ? 發(fā)生錯誤
? 應(yīng)該是數(shù)據(jù)庫路徑的問題,復(fù)制到數(shù)據(jù)庫到web.py同級目錄下看看,并修改路徑。同時記下困惑python下的絕對路徑問題。
index.htm:
$def with (movies)
豆瓣movies
$movies
發(fā)現(xiàn)瀏覽器顯示:
?數(shù)據(jù)是十六進(jìn)制,不對參數(shù)引用錯誤。
$def with (movies)
豆瓣movies
$movies['name']
? ?繼續(xù)出現(xiàn)問題,
? ? ? ? ? ?IndexError?
? 應(yīng)該是movies['name'], 回頭想想,錯誤的原因就是不知道取movies參數(shù)的值。
? 改成問題:
? $movies.name
?一樣還是出現(xiàn)問題。
exceptions.attributeError
?累了,學(xué)習(xí)就是這樣的。。。 ? ?錯誤不知道 出現(xiàn)在哪里? ?
?修改一下了index.htm
$def with (movies)
豆瓣movies
$def with (movies)
豆瓣movies
<ui>
?$for movename in movies:
<li>
? ? ? ? ?$movename.name,$movename.year,$movename.nation ?
</li>
? 這個時候, 頁面顯示正常了, 由此可見了。?
?數(shù)據(jù)庫傳輸過來了一定是一組對象。下面是服務(wù)器的顯示。
http://0.0.0.0:8080/
0.0 (1): SELECT * FROM move
127.0.0.1:52985 - - [13/May/2015 13:27:34] "HTTP/1.1 GET /" - 200 OK
0.0 (1): SELECT * FROM move
127.0.0.1:52985 - - [13/May/2015 13:27:36] "HTTP/1.1 GET /" - 200 OK
0.0 (1): SELECT * FROM move
127.0.0.1:52985 - - [13/May/2015 13:27:38] "HTTP/1.1 GET /" - 200 OK
0.0 (1): SELECT * FROM move
127.0.0.1:52996 - - [13/May/2015 13:29:07] "HTTP/1.1 GET /" - 200 OK
0.0 (1): SELECT * FROM move
127.0.0.1:52999 - - [13/May/2015 13:29:33] "HTTP/1.1 GET /" - 200 OK
0.0 (1): SELECT * FROM move
127.0.0.1:52999 - - [13/May/2015 13:29:37] "HTTP/1.1 GET /" - 200 OK
0.0 (1): SELECT * FROM move
127.0.0.1:53002 - - [13/May/2015 13:29:54] "HTTP/1.1 GET /" - 200 OK
? ? ?直接調(diào)用, select * ?from move
不過,讓我有些感興趣的是 :127.0.0.1 后面,變化的端口。