Flask · 数据库操作
python 连接数据库 创建db.py — 连接 & 查询
import pymysql
def get_conn():
return pymysql.connect(
host='localhost',
user='root',
password='159874',
database='mytest',
charset='utf8'
)
def query_data(sql):
conn = get_conn()
try:
cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute(sql)
return cursor.fetchall()
finally:
conn.close()
def insert_or_update_data(sql):
conn = get_conn()
try:
cursor = conn.cursor()
cursor.execute(sql)
conn.commit()
finally:
conn.close()
# 测试插入 & 查询
if __name__ == "__main__":
sql = "insert user (name, sex, age, email) values('daming', 'man', 30, 'daming@qq.com')"
insert_or_update_data(sql)
sql = "select * from user"
datas = query_data(sql)
import pprint
pprint.pprint(datas)
- get_conn() 建立 MySQL 连接
- query_data() 查询返回字典列表
- insert_or_update_data() 增删改,自动提交
app.py — Flask 路由 & 模板
from flask import Flask, render_template, request
import db
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
@app.route('/biaodan')
def biaodan():
return render_template("biaodan.html")
@app.route("/do_add_user", methods=['POST'])
def do_add_user():
name = request.form.get("name")
sex = request.form.get("sex")
age = request.form.get("age")
email = request.form.get("email")
sql = f"""
insert into user (name, sex, age, email)
values ('{name}', '{sex}', {age}, '{email}')
"""
db.insert_or_update_data(sql)
return "tianjia success"
@app.route("/show_users")
def show_users():
sql = "select id, name from user"
datas = db.query_data(sql)
return render_template("show_users.html", datas=datas)
@app.route("/user/")
def show_user(user_id):
sql = "select * from user where id=" + user_id
datas = db.query_data(sql)
user = datas[0]
return render_template("show_user.html", user=user)
if __name__ == '__main__':
app.run(debug=True)
- 路由:/biaodan 表单页,/show_users 列表
- 动态路由 /user/<user_id> 展示单条详情
- do_add_user 接收 POST,拼接 SQL 插入
templates / 三个 HTML
biaodan.html — 表单提交
<body>
<div class="card">
<h2>📋 简单表单</h2>
<form action="/do_add_user" method="POST">
<input type="text" name="id" placeholder="id">
<input type="text" name="name" placeholder="姓名">
<input type="number" name="age" placeholder="年龄">
<input type="radio" name="sex" value="男" checked> 男
<input type="radio" name="sex" value="女"> 女
<input type="email" name="email" placeholder="邮箱">
<button type="submit">提交</button>
</form>
</div>
</body>
show_users.html — 用户列表
<body>
<div>
{% for user in datas %}
<div>
ID:{{ user.id }},姓名:{{ user.name }},
<a href="/user/{{ user.id }}">详情</a>
</div>
{% endfor %}
</div>
</body>
show_user.html — 单条详情
<body>
<div>
ID:{{ user.id }},
姓名:{{ user.name }},
年龄:{{ user.age }},
性别:{{ user.sex }},
邮箱:{{ user.email }}
</div>
</body>
运行 & 交互流程
启动 Flask:
python app.py → 访问
http://127.0.0.1:5000/biaodan
- 填写表单 → 提交 → 数据写入 MySQL
- 访问 /show_users 查看所有用户 ID + 姓名
- 点击「详情」跳转 /user/<id> 展示完整字段
数据表 user 结构
id (INT, 自增)
name (VARCHAR)
sex (VARCHAR)
age (INT)
email (VARCHAR)
Flask 与 MySQL 协作
· db.py 封装连接与 SQL 执行,app.py 专注路由与逻辑。
· 模板 (Jinja2) 渲染数据,实现前后端分离的雏形。