flask框架和html交互通过pymysql链接mysql查询信息的代码
时间: 2025-03-29 14:03:11 浏览: 49
<think>好的,用户需要寻找使用Flask框架与HTML交互,并通过PyMySQL连接MySQL进行查询的代码示例。首先,我需要确保回答结构清晰,分步骤说明,并且代码正确。
首先,用户可能需要一个完整的示例,包括Flask后端、HTML前端以及数据库连接的部分。我应该先列出所需的步骤,比如安装必要的库,创建数据库,编写Flask应用,处理路由和表单,以及数据库查询。
然后,我需要考虑代码的正确性。比如,使用PyMySQL的正确语法,确保数据库连接参数正确,防止SQL注入,使用预处理语句。同时,在HTML表单中,确保method是post,并且有对应的name属性,这样Flask才能正确获取数据。
可能还需要处理GET和POST请求,在路由中使用methods=['GET', 'POST']。在查询数据库时,使用cursor.execute()并传入参数元组,避免拼接字符串导致的注入风险。
另外,要提醒用户替换数据库的连接信息,比如用户名、密码、数据库名等。可能还需要提到安装Flask和PyMySQL,使用pip安装的命令。
然后,用户可能会有相关问题,比如如何防止SQL注入,如何处理分页,或者如何部署到生产环境。我需要准备几个相关问题,帮助用户进一步学习。
最后,检查是否所有数学公式都正确使用了$...$或$$...$$格式,但在这个问题中可能涉及较少数学内容,但如果有的话,比如在解释算法时,需要正确应用格式。不过当前问题主要涉及代码,可能不需要数学公式,但需要确保代码块正确使用三个反引号包裹,并标注语言类型。
总结步骤:
1. 安装必要的库(Flask, PyMySQL)
2. 创建MySQL数据库和表
3. 编写Flask应用,配置数据库连接
4. 创建HTML模板,包含表单
5. 处理表单提交,执行查询
6. 显示查询结果
7. 注意事项,如防注入、错误处理
需要确保代码示例中的占位符(如username、password、dbname)被正确替换。同时,在HTML中使用表单的action指向对应的路由,比如/search,方法为post。
可能还需要在Flask中使用render_template来渲染HTML,并将查询结果传递过去。在结果显示部分,使用Jinja2模板语法循环输出结果。
检查是否有遗漏的部分,比如数据库连接的关闭,游标和连接的关闭应该在finally块中处理,或者使用上下文管理器(with语句),但PyMySQL的游标可能不支持,所以需要显式关闭。
最后,生成相关问题,如优化查询、分页处理、防止注入、部署注意事项等。</think>### Flask与HTML交互及MySQL查询示例
以下是使用Flask框架连接MySQL数据库并通过HTML页面实现查询的完整代码示例:
---
#### 1. 安装依赖
```bash
pip install flask pymysql
```
#### 2. 数据库准备
创建MySQL数据库和数据表:
```sql
CREATE DATABASE user_db;
USE user_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
```
#### 3. Flask应用代码(app.py)
```python
from flask import Flask, render_template, request
import pymysql
app = Flask(__name__)
# 数据库配置
DB_CONFIG = {
"host": "localhost",
"user": "your_username",
"password": "your_password",
"db": "user_db",
"charset": "utf8mb4"
}
@app.route('/')
def index():
return render_template('search.html')
@app.route('/search', methods=['POST'])
def search():
search_term = request.form['search_term']
connection = None
try:
connection = pymysql.connect(**DB_CONFIG)
with connection.cursor() as cursor:
# 使用参数化查询防止SQL注入
sql = "SELECT * FROM users WHERE name LIKE %s OR email LIKE %s"
params = (f"%{search_term}%", f"%{search_term}%")
cursor.execute(sql, params)
results = cursor.fetchall()
return render_template('results.html', results=results)
except Exception as e:
return f"数据库错误: {str(e)}"
finally:
if connection:
connection.close()
if __name__ == '__main__':
app.run(debug=True)
```
#### 4. HTML模板文件
创建`templates/search.html`:
```html
<!DOCTYPE html>
<html>
<body>
<h2>用户查询</h2>
<form action="/search" method="post">
<input type="text" name="search_term" placeholder="输入姓名或邮箱">
<button type="submit">搜索</button>
</form>
</body>
</html>
```
创建`templates/results.html`:
```html
<!DOCTYPE html>
<html>
<body>
<h2>查询结果</h2>
<table border="1">
<tr>
<th>ID</th>
<th>姓名</th>
<th>邮箱</th>
</tr>
{% for row in results %}
<tr>
<td>{{ row[0] }}</td>
<td>{{ row[1] }}</td>
<td>{{ row[2] }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
```
---
### 关键要点说明
1. **防SQL注入**:使用参数化查询`%s`占位符,避免直接拼接字符串[^1]
2. **连接管理**:通过`finally`块确保数据库连接关闭
3. **模板渲染**:使用Jinja2模板引擎动态生成HTML
4. **路由配置**:`/`处理主页请求,`/search`处理表单提交
---
阅读全文
相关推荐

















