web开发学习周记——对表格的基本操作
环境已经搭建好了,接下来要用这些工具制作一个简单的小应用:对表格中的信息进行“增删改查”。
首先要在 Navicat 新建数据库,在数据库中新建我们要操作的表格,这里用的是 ace admin 的 tables 中的表格。
id 字段是之后加上去的,因为在编写删除语句时,发现通过每行数据的行号锁定位置进行删除,所以加了 id 字段表示行数,在之后的编写中也发现 id 是必不可少的字段,很多的操作都需要 id 来锁定目标。
表格建好后,需要初始化表格的第一行。在查询中编写如下代码:
INSERT INTO workform (id,domain,price,click,date,status) VALUES (7,'ac.com','83','4330','2019-5-31','Expiring');
workform是表格的名字,前面括号里是每列的名字,后面括号里是对应的内容,这里要注意名字的类型,输入的内容要符合定义的类型,否则无法初始化。
初始化成功后,说明我们的表格没有问题,接下来就要调用 web.py 功能编写应用框架。
连接数据库:
db = web.database(dbn='postgres', user='postgres', pw='618966', db='test')
这是 web.py 连接数据库的固定用法,我用的是postgres,所以dbn就是它;user和pw是登录postgres时的用户名和密码,db是新建的数据库的名字。
在连接前要检查,是否安装了数据库访问库,postgres用psycopg2访问。
安装psycopg2方法:pip install psycopg2
修改主代码:
在之前编写的“hello word”代码的基础上进行修改。
修改index.GET:
class index:
def GET(self):
domain = db.select('workform')
return render.index(domain)
db.select() 是读取数据库内容的命令,括号中输入的是表格名 workform ,前面要具体到表格中具体的列名 domain ,最后返回 domain 内容。
若要读取多个列表的内容,按照上面的规则遍历其他变量即可。
修改index.html:
$def with (workforms)
<ul>
$for workform in workforms:
<li domain="t$workform.domain" >$workform.domain</li>
</ul>
$for workform in workforms 可以理解为 python 的 for 循环语句,把 workform 的内容按顺序显示到网页上。要注意 表格名.列名 的格式,我在编写是把表格名写成了新建的数据库名,频繁报错。
运行程序(多行内容)
读取成功,接着编写增加内容的应用。
编写 add.POST :
首先要对 URL 进行更改:
urls = (
'/', 'index',
'/add', 'add'
)
增加新类:class add
class add:
def POST(self):
i = web.input()
n = db.insert('workform', domain=i.domain )
raise web.seeother('/')
web.input 可以让用户输入要增加的数据。db.insert 把数据插入表格 workform ,i.domain 定义了具体的插入位置。 最后 web.seeother 把定义返回到URL。
更改index.html:
在之前的基础上,增加如下代码:
<form method="post" action="add">
<p><input type="text" name="domain"> <input type="submit" value="Go!" /></p>
这里要注意,name是一个统称,name右边的是具体的内容,不能写成 domain=“domain”。这也是我犯错的地方,而且自己迟迟未能发现,最后是师兄指出我的错误。
更改列表内容的应用。
更改列表的代码和增加列表的代码类似,只需在 add.POST 上修改。将 db.insert 命令改为:
m = db.update('workform', where="id = 2", id=i.id , domain=i.domain )
更改列表需要事先锁定好行数,这就是最开始列表创建 id 列的原因,因此在网页上更改时,也要输入行数,所以要在 index.html 中增加一段代码:
<input type="text" name="id">
增加了一个输入框
删除和查询代码相对简单,不需要在类中做出更改,只需在连接数据库的代码下编写。
删除:
db.delete('workform', where="id=2")
删除第二行的内容
查询:
results = list(db.select('workform', what="domain"))
这里查询的是 domain 列的内容,用 list 是查询结果以列表的形式显示。
以上就是对表格的简单操作,附上最后的完成版:
增加数据:
删除第6行:
更改第五行:
查询 click:
考试周临近,本学期的课外的学习也该告一段落了,现在还是本科生,还是应该以当前的学业为主,认真复习,努力备考。至于web开发的学习,暑假将会继续学习。