Python网页制作 Day 3

在Day2中,我们实现了书目检索系统的初步构建。在实际生活中,如果我们需要从数据库调取大量的书本数据展示在网页上,是不可能一本书一本书写上去的,我们需要用到循环。

我在数据库中创建了几张表:
在这里插入图片描述
首先,我们需要对数据库进行连接,这样才能从中获取数据。
数据库连接的python代码模板:

import pymysql

#一、连接数据库的四个要素
hostName="localhost"
userName="root"          #数据库连接的用户名
userPassword="root"      #数据库连接的密码
dbName="imdpython"       #数据库的名字

#二、使用pymysql的connect方法连接mysql
db=pymysql.connect(hostName,userName,userPassword,dbName)

#三、我们需要一个游标,获取数据更快
_cursor=db.cursor()

#四、 编写SQL(你可以编写任意sql语句)
   #sql="select a.book_bname,a.author,b.publish from imd_book a left join imd_publish b on a.publisher=b.publish_id"
   #sql = "select * from imd_book"
   #sql="insert into imd_book(book_bname,publisher,author,publish_date,isbn) values('知识图谱',2,'嘉欣','2009-9-11','112XXX112')"
   #sql="update imd_book set book_bname='诗经解析' where book_bname='知识图谱'"
   #sql="delete from imd_book WHERE  book_id>10"

#五、在try异常里执行SQL
try:
	_cursor.execute(sql)
    
	#六、获取数据
	results=_cursor.fetchall()
    
	#七、循环显示数据
	for row in results:    #想读取数出数据时可以用这个循环输出
		print(row[3])
		
except:
	print('出错啦');
	
#八、关闭数据库
db.close()

第二步,我们可以把这个数据库连接的代码放进先前编辑好的.py代码中:

from flask import Flask,render_template
import pymysql
app=Flask(__name__)

@app.route("/lib")
def index():

    #一、 连接数据库的四个要素(端口号默认)
    hostName = "localhost"
    userName = "root"
    userPassword = "root"
    dbName = "imdpython"

    # 二、使用Pymysql的connect方法连接mysql
    db = pymysql.connect(hostName, userName, userPassword, dbName)
    
    # 三、我们需要一个游标(负责找数据)
    _cursor = db.cursor()
    
    # 四、编写SQL
    sql = "select * from imd_book"
    
     # 五、执行sql
    try:
        _cursor.execute(sql)
        
        #六、 获取数据
        results = _cursor.fetchall()
        
        # 七、循环显示数据
        for row in results:
            print(row[3])
            
    except:
        print('出错啦');
        
    # 关闭数据库
    db.close()

    return render_template('lib.html',dataList=results)   #这里将传递一组数据给lib.html,注意在html中变量的标号要与相应字段名的位置对应

if __name__=='__main__':
    app.run(host="0.0.0.0")

lib.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>书目检索系统</title>
    <link rel="icon" href="{{url_for('static',filename='images/tubiaoqian.ico')}}" type="image/x-icon"/>
   <style type="text/css">
       span{
           color:purple;
       }
   </style>
</head>
<body>
<img width="150" src="{{url_for('static',filename="images/tu1.jpeg")}}"/>
<h1><span style='color:darkblue'><strong>书目检索系统</strong></span></h1>
<form action="save.php" method="post" >
    <label>书籍种类:</label>
    <select>
        <option value="全部">全部</option>selected="selected"
        <option value="教材">教材</option>
        <option value="期刊">期刊</option>
        <option value="文学">文学</option>
        <option value="法律">法律</option>
        <option value="政治">政治</option>
        <option value="小说">小说</option>
        <option value="金融">金融</option>
        <option value="科技">科技</option>
        <option value="其他">其他</option>
    </select>
<form method="post" action="">
    <table>
        <tr>
        <td><select id="">
            <option value="1"
                    selected="selected">题名</option>
            <option value="2">出版社</option>
        </select></td>
            <td><input type="text" id=""/></td>
            <td><input value="查询" type="submit"/>
            <input type="reset" value="重置"  /></td>

        </tr>
    </table>
</form>
<table>
    {% for r in dataList%}    #这里使用循环逐条获取imd_book表中的数据:书名、出版社、作者等
<tr>
   <td colspan="3">{{r[2]}}</td>   #注意标号2与imd_book表中的相应字段的位置对应
</tr>
<tr>
   <td>
        <img width="60" src="{{url_for('static',filename="images/gaodengshuxue.jpg")}}">
    </td>
   <td>
        <ul>
            <li>{{r[5]}}</li>
            <li>{{r[1]}}</li>
        </ul>
    </td>
   <td>
        <ul>
            <li><span>馆藏书本:</span>9</li>   #由于imd_book表中没有关于馆藏总数的信息,暂且随意取值,稍后再讲如何统计馆藏书本
            <li><span>可借书本:</span>5</li>   #同上
        </ul>
    </td>
</tr>
    {%endfor%}   #循环结束
</table>
</body>
</html>

运行后可以发现,我们imd_book表中所有的书本及其对应的出版社、书名均展示出来了。(除了图片、馆藏总数、馆藏可借是固定值)

接下来,为了统计馆藏总数、馆藏可借总数,我们只需要改变sql语句、获取数据的方式,并在html中为其添加变量即可。
变更代码如下:


	try:
		_cursor.execute(sql)  		# 执行SQL
		results = _cursor.fetchall()    #获取多条记录
		datalist = []
		for row in results:   #每一轮,row获取imd_book中的一条记录,row[i]代表第i列的数据
			_one = []
			_one.append(row[0])
			_one.append(row[1])
			_one.append(row[2])
			_one.append(row[3])
			_one.append(row[4])

			sql1 = "select count(*) from imd_copybook where book_id= %s"
			sql2 = "select count(*) from imd_copybook where is_borrow=1 and status=1 and book_id=%s"#is_borrow=1表示可借,status=1表示在馆
			
			print(sql1)
			print(sql2)
			print(row[3])

			_cursor.execute(sql1,(row[0],))
			# 获取数据
			results1 = _cursor.fetchone()
			_one.append(results1[0])
			print(results1[0])
			
			_cursor.execute(sql2,(row[0],))
			# 获取数据
			results2 = _cursor.fetchone()
			_one.append(results2[0])
			print(results2[0])
			
			datalist.append(_one)   #datalist相当于得到了一条带有馆藏总数和馆藏记录的记录
			
	except:
		print('出错啦')

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值