python web学习2-连接数据库
文章目录
- 前言
- 一、MySQL数据库
- 1. 准备环境
- 2. 基本语法
- 二、代码展示
- 1. 主程序app.py
- 2. 连接数据库的代码 db.py
- 3. templates文件中的代码
- 三、运行结果
- 四、总结
前言
之前学习了用flask进行简单的网页展示,并实现了简单的用户登录界面。接下来记录最近学习的flask连接mysql数据库,完善用户登录系统,加入注册和查询用户信息的功能。
由于初次学习,所写的代码和展示的页面都比较简陋,各位大佬就看看图一乐,发现有错误之处请指出。我主要是记录所学历程,总结一下,日后好查漏补缺。
一、MySQL数据库
SQL,结构化查询语言,Structured Query Language。MySQL则是当前使用最广泛的开源关系型数据库,由于有免费的社区版,可供我们进行学习和部署。
1. 准备环境
下载mysql数据库和workbench,在workbench中新建一个数据库user_info,新建一个表user。

2. 基本语法
这次的学习主要用到了mysql的查询数据和增加数据的功能。注意如果用workbench可视化操作数据,需要先双击选中该数据库。接下来是这次用到的几个最基本的语句,当然还有很多其他的SQL语句,这些留着日后再说。
# 查询整个表中的数据,user是表名
select * from user;
# 插入或新增数据
insert into user (username, password) values ("zhangsan", "123456");
#查询特定字段的数据
select * from user where name = "zhangsan";
二、代码展示
主要有三大块,第一个是主程序代码app.py;第二个是连接数据库的代码db.py;最后是模板文件templates,里面有注册登录所用的hello.html和展示用户信息所用的user.html。
1. 主程序app.py
主程序中三个路由分别指向三个函数,分别实现注册,登录,用户信息查看。
# app.pyfrom flask import Flask, render_template, request, redirect
# 这里把数据库中的方法全部引入
from db import *
app = Flask(__name__)@app.route('/')
def home():return 'Home
'# 注册函数
@app.route('/register', methods=['POST', 'GET'])
def register():if request.method == 'POST':username = request.form['username']password = request.form['password']# write()是数据库中写入数据的函数write(username, password)return "Success!
"return render_template('hello.html')# 登录函数
@app.route('/login', methods=['POST', 'GET'])
def login():if request.method == 'POST':username = request.form['username']password = request.form['password']# is_existed()是数据库中判断用户名或密码是否存在的函数if is_existed(username, password):return redirect('https://www.baidu.com')else:message = 'Incorrect username or password'return render_template('hello.html', message=message)return render_template('hello.html')# 显示用户信息的函数
@app.route('/user', methods=['POST','GET'])
def show_user():# show()是展示用户信息的函数result = show()return render_template("user.html", datas=result)if __name__ == '__main__':app.run()
2. 连接数据库的代码 db.py
此处也有三个函数,同样对应注册,登录,信息展示,同时app.py通过import将这三个方法导入。
# db.py
import pymysql# conn = pymysql.connect("数据库地址", "用户名", "密码", "数据库名称")
conn = pymysql.connect("localhost", "root", "123456", "user_info")
# 直接conn.cursor()返回的是一个二元元组,加入参数"pymysql.cursors.DictCursor"可以返回一个字典形式类似[{},{},{}]
cur = conn.cursor(pymysql.cursors.DictCursor)# 注册相关的函数,将用户输入的用户名和密码写入数据库
def write(username, password):sql = f"insert into user (username, password) values ('{username}', '{password}')"cur.execute(sql)conn.commit()# 登录相关的函数,判断用户名和密码是否存在
def is_existed(username, password):# 方法一:全部取出一次判断# sql = "select * from user"# cur.execute(sql)# result = cur.fetchall()# for row in result:# if row[1] == username and row[2] == password:# return True# return False# 方法二:边取出边判断sql = f"select * from user where username = '{username}' and password = '{password}'"cur.execute(sql)result = cur.fetchall()if len(result) == 0:return Falsereturn True# 展示用户信息的函数
def show():sql = "select * from user"cur.execute(sql)result = cur.fetchall()return result'''注:由于三个函数的操作可能是多次进行,每一个函数结束都不可关闭数据库,否则进行下一步就会报错。
但这样一直不关数据库会造成资源浪费,可以把连接数据库的语句写到函数内部,每次运行完关闭,下一次重新连接。
这样不知道怎么样,多次连接数据库是否会使效率变低,后期还需学习。'''
3. templates文件中的代码
这里是两个html页面的展示,分别是用来展示用户注册和登录的hello.html和显示用户信息的user.html。注册和登录页面本应该有所不同,但由于主要探讨方法的实现,我就没有加以区分。
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Documenttitle>
head>
<body><div style="text-align: center;"><h1>某某网站h1><span style="color: #ff0000;">{% if message %} {{message}} {% endif %}span> <form method='post'>账号<input type="text" name="username" placeholder="username"/><br/>密码<input type="password" name="password" placeholder="password"/><br/><input type="submit" name="submit" value="提交"/><input type="reset" value="重置"/>form>div>
body>
html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>用户信息title>
head>
<body><h1>用户信息详情h1><table border="1px"><tr><th>IDth><th>用户名th><th>密码th>tr>{% for i in datas %}<tr><td>{{i["id"]}}td><td>{{i["username"]}}td><td>{{i["password"]}}td>tr>{% endfor %}table>
body>
html>
三、运行结果
启动程序app.py,地址栏输入http://127.0.0.1:5000/register,进入如下注册页面:

首先数据库中是只有一条数据的:

注册一个lisi,密码123,点击提交。再次进入workbench:

lisi已被成功加入数据库中。同样的方法再添加几条:

可以看到目前一共四条数据。id部分有跳行是因为我之前删过一部分数据。接下来输入http://127.0.0.1:5000/login进行登录,测试均是可以的。如果输入账号或密码错误会报错。
输入http://127.0.0.1:5000/user,可以看到所有用户的信息:

四、总结
通过这次的学习,初步了解了mysql和flask的基本使用,但是正如之前所说,目前的成果还是很简陋的。后期还需深入学习。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
