引言
Flask 是一个轻量级的 Web 框架,使用 Python 编写。它非常适合初学者入门 Web 开发,同时也足够强大以支持复杂的 Web 应用。在 Flask 应用中,MySQL 数据库是一个常用的后端存储方案。本文将带您从零开始,学习如何在 Flask 应用中操作 MySQL 数据库。
环境准备
在开始之前,请确保您已经安装了以下软件:
- Python 3.x
- Flask
- MySQL 数据库服务器
您可以通过以下命令安装 Flask 和其他必要的依赖项:
pip install flask
pip install flask-mysql
创建 Flask 应用
首先,创建一个基本的 Flask 应用。以下是一个简单的示例:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Flask with MySQL!'
if __name__ == '__main__':
app.run(debug=True)
将上述代码保存为 app.py,然后运行它。您应该能够在浏览器中看到 “Hello, Flask with MySQL!“。
配置 MySQL 数据库
接下来,我们需要配置 MySQL 数据库。首先,创建一个新数据库,例如 flask_db。
CREATE DATABASE flask_db;
然后,创建一个新用户并授权其访问该数据库:
CREATE USER 'flask_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON flask_db.* TO 'flask_user'@'localhost';
FLUSH PRIVILEGES;
确保您已经将用户 flask_user 的密码替换为您的密码。
连接 Flask 应用到 MySQL 数据库
在 Flask 应用中,我们将使用 flask-mysql 扩展来连接到 MySQL 数据库。首先,安装扩展:
pip install flask-mysql
然后,在 app.py 文件中配置数据库连接:
from flask import Flask
from flask_mysqldb import MySQL
app = Flask(__name__)
# 数据库配置
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'flask_user'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'flask_db'
# 初始化 MySQL 连接
mysql = MySQL(app)
确保将用户名和密码替换为您的 MySQL 数据库用户名和密码。
创建数据模型
为了在数据库中存储数据,我们需要定义数据模型。以下是一个简单的用户模型示例:
from flask_mysqldb import MySQL
from flask import Flask, request, jsonify
app = Flask(__name__)
# 数据库配置
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'flask_user'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'flask_db'
# 初始化 MySQL 连接
mysql = MySQL(app)
# 定义用户模型
class User:
def __init__(self, id, name, email):
self.id = id
self.name = name
self.email = email
def insert(self):
cursor = mysql.connection.cursor()
cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", (self.name, self.email))
mysql.connection.commit()
cursor.close()
def update(self, name, email):
cursor = mysql.connection.cursor()
cursor.execute("UPDATE users SET name = %s, email = %s WHERE id = %s", (name, email, self.id))
mysql.connection.commit()
cursor.close()
def delete(self):
cursor = mysql.connection.cursor()
cursor.execute("DELETE FROM users WHERE id = %s", (self.id,))
mysql.connection.commit()
cursor.close()
在这个示例中,我们定义了一个 User 类,其中包含 insert、update 和 delete 方法来操作数据库。
测试数据模型
现在,我们可以通过以下代码来测试我们的数据模型:
# 在 app.py 中添加以下代码
if __name__ == '__main__':
# 创建新用户
user = User(1, 'Alice', 'alice@example.com')
user.insert()
# 更新用户信息
user.update('Alice Smith', 'alice.smith@example.com')
# 删除用户
user.delete()
app.run(debug=True)
运行 app.py 文件,您应该能够看到用户信息被插入、更新和删除。
创建 API 接口
为了方便与数据库交互,我们可以创建 API 接口。以下是一个简单的示例,它允许我们通过 HTTP 请求添加、更新和删除用户:
from flask import Flask, request, jsonify
from flask_mysqldb import MySQL
app = Flask(__name__)
# 数据库配置
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'flask_user'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'flask_db'
# 初始化 MySQL 连接
mysql = MySQL(app)
# 创建用户
@app.route('/users', methods=['POST'])
def create_user():
name = request.json['name']
email = request.json['email']
cursor = mysql.connection.cursor()
cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", (name, email))
mysql.connection.commit()
cursor.close()
return jsonify({'success': True})
# 更新用户
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
name = request.json['name']
email = request.json['email']
cursor = mysql.connection.cursor()
cursor.execute("UPDATE users SET name = %s, email = %s WHERE id = %s", (name, email, user_id))
mysql.connection.commit()
cursor.close()
return jsonify({'success': True})
# 删除用户
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
cursor = mysql.connection.cursor()
cursor.execute("DELETE FROM users WHERE id = %s", (user_id,))
mysql.connection.commit()
cursor.close()
return jsonify({'success': True})
if __name__ == '__main__':
app.run(debug=True)
现在,您可以使用工具如 Postman 或 cURL 来测试这些 API 接口。
总结
通过本文,您已经学会了如何在 Flask 应用中操作 MySQL 数据库。您可以从这里开始,创建更复杂的 Web 应用,并利用 Flask 和 MySQL 数据库的强大功能来满足您的需求。祝您在 Flask 和 MySQL 数据库的世界中取得成功!
