本来是计划跟着learn python the hard way ,继续下去, 不过中途补充一下,网页的基础知识吧,也不耽搁了。
[摘录]:用来记下,之前不理解的 地方?
1.web.py 引入数据库的路径问题。 --已解决
2、index.html调用参数,数据库中,怎么调用? --已解决
数据库的学习
只是知道一些数据库的知识, 一步步来吧,实战中学习呢。
为什么要学数据库?
上节中我们调用了move字典,但是如果我们是个网站,这些数据,如果只是字典的话,恐怕没法吧, 下面我们就要用数据库实现上篇的例子。
为什么要学习?
是不是又要多学东西呢? 呵呵,世界就是这样的,一句learn python the hard way的话,
不管是什么原因,你一定要坚持下去,放弃的话,你会失去达到这个程度的机会。
SQLlite3的学习
(1)是不是从基础再学习, 还是先简单的解决。
(2)不如看看我们要解决的问题是什么?
解决上一课的问题,那需要很复杂吗? 不需要
那就简单的解决, 以后如果在遇到,在回头学啊。主力是解决python.
SQLite3的基础
sqlite3的基础是sql结构数据库,大致百度一下,看了看,不属于sql服务器,至于细节目前我们暂时搁置, 先看看SQL数据库的知识,还是老地方w3school
什么是数据库?
这个电子表格,名字叫 python2015web, 表1叫电影库,表2叫读者库, 对应sql, python2015web就是数据库, 电影库就是数据库表。
虽然上面是电子表格,但是数据库表就是这个样子的。
不同的是,电子表格,基本是你手填上去的,而这里大多数是用命令。
sql把命令分为两种,一种是直接操作电子表格内,一种是建立表和文件名的。
操作电子表格的有:select 查询数据库并获得数据。
update 更新数据库的数据。
insert into : 插入数据库的数据
delete : 删除数据库的数据。
另一种:create database ,建立数据库
alter database , 修改数据库
create table ,建立数据库表
alter table , 修改数据库表
drop table , 删除数据库
create index , 创建索引
drop index, 删除索引
数据库的一些小知识:
1: select 列名, select * from table
2: sql 用单引号围绕文本值,如果是数值,不用单引号。
3: where
有条件选取数据。
select * from 数据库表 where 'city' = 'beijjing';
pyton中如何运用
(1)首先在sqllite3 建立我们的数据库。(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)开始数据库制作网页了。
修改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' , 发生错误
应该是数据库路径的问题,复制到数据库到web.py同级目录下看看,并修改路径。同时记下困惑python下的绝对路径问题。index.htm:
$def with (movies)
豆瓣movies
$movies
发现浏览器显示:
数据是十六进制,不对参数引用错误。$def with (movies)
豆瓣movies
$movies['name']
继续出现问题,
IndexError
应该是movies['name'], 回头想想,错误的原因就是不知道取movies参数的值。
改成问题:$movies.name
一样还是出现问题。
exceptions.attributeError
累了,学习就是这样的。。。 错误不知道 出现在哪里?
修改一下了index.htm
$def with (movies)
豆瓣movies$def with (movies)
豆瓣movies
$for movename in movies:
$movename.name,$movename.year,$movename.nation
这个时候, 页面显示正常了, 由此可见了。
数据库传输过来了一定是一组对象。下面是服务器的显示。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
直接调用, select * from move
不过,让我有些感兴趣的是 :127.0.0.1 后面,变化的端口。