Python网页制作 Day 3

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

我在数据库中创建了几张表:
Python网页制作 Day 3_第1张图片
首先,我们需要对数据库进行连接,这样才能从中获取数据。
数据库连接的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




    
    书目检索系统
    
   



书目检索系统

{% for r in dataList%} #这里使用循环逐条获取imd_book表中的数据:书名、出版社、作者等 #注意标号2与imd_book表中的相应字段的位置对应 {%endfor%} #循环结束
{{r[2]}}
  • {{r[5]}}
  • {{r[1]}}
  • 馆藏书本:9
  • #由于imd_book表中没有关于馆藏总数的信息,暂且随意取值,稍后再讲如何统计馆藏书本
  • 可借书本:5
  • #同上

运行后可以发现,我们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('出错啦')

运行结果:
Python网页制作 Day 3_第2张图片

你可能感兴趣的:(Python,Study,Python,网页制作,检索系统,数据库)