为了在 Flask 中实现 User
用户的增、删、改、查操作,并通过 Flask-SQLAlchemy
与 MySQL 数据库交互,下面是一个完整的示例:
1. 安装依赖
确保你已经安装了以下依赖:
pip install flask-sqlalchemy
pip install mysqlclient # 或者使用 pymysql
2. 配置 Flask 和 MySQL 数据库
在 app.py
中进行以下配置:
示例代码:
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
# 初始化 Flask 应用
app = Flask(__name__)
# 配置 MySQL 数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost:3306/your_database'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 禁用对象修改追踪
# 创建 SQLAlchemy 对象
db = SQLAlchemy(app)
# 定义 User 模型
class User(db.Model):
__tablename__ = 'user' # 数据库表名
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'
# 创建数据库表(如果表不存在的话)
with app.app_context():
db.create_all()
# 增:创建用户
@app.route('/add_user', methods=['POST'])
def add_user():
data = request.get_json()
username = data.get('username')
email = data.get('email')
if not username or not email:
return jsonify({'error': 'Missing username or email'}), 400
new_user = User(username=username, email=email)
try:
db.session.add(new_user)
db.session.commit()
return jsonify({'message': f'User {new_user.username} added successfully!'}), 201
except Exception as e:
db.session.rollback()
return jsonify({'error': str(e)}), 500
# 查:获取所有用户
@app.route('/get_users', methods=['GET'])
def get_users():
users = User.query.all()
return jsonify([{'id': user.id, 'username': user.username, 'email': user.email} for user in users])
# 查:获取单个用户
@app.route('/get_user/<int:id>', methods=['GET'])
def get_user(id):
user = User.query.get(id)
if not user:
return jsonify({'error': 'User not found'}), 404
return jsonify({'id': user.id, 'username': user.username, 'email': user.email})
# 改:更新用户
@app.route('/update_user/<int:id>', methods=['PUT'])
def update_user(id):
user = User.query.get(id)
if not user:
return jsonify({'error': 'User not found'}), 404
data = request.get_json()
username = data.get('username')
email = data.get('email')
if username:
user.username = username
if email:
user.email = email
try:
db.session.commit()
return jsonify({'message': f'User {user.username} updated successfully!'}), 200
except Exception as e:
db.session.rollback()
return jsonify({'error': str(e)}), 500
# 删:删除用户
@app.route('/delete_user/<int:id>', methods=['DELETE'])
def delete_user(id):
user = User.query.get(id)
if not user:
return jsonify({'error': 'User not found'}), 404
try:
db.session.delete(user)
db.session.commit()
return jsonify({'message': f'User {user.username} deleted successfully!'}), 200
except Exception as e:
db.session.rollback()
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=True)
3. 路由功能解释
-
增:添加用户
POST /add_user
请求体格式:{ "username": "JohnDoe", "email": "john@example.com" }
在数据库中插入新的用户。
-
查:获取所有用户
GET /get_users
返回所有用户的列表,格式如下:[ {"id": 1, "username": "JohnDoe", "email": "john@example.com"}, {"id": 2, "username": "JaneDoe", "email": "jane@example.com"} ]
-
查:获取单个用户
GET /get_user/<int:id>
根据用户的id
获取单个用户的信息。例如,GET /get_user/1
返回指定用户的详细信息。 -
改:更新用户
PUT /update_user/<int:id>
请求体格式:{ "username": "UpdatedName", "email": "updated@example.com" }
根据用户的
id
更新用户的信息。 -
删:删除用户
DELETE /delete_user/<int:id>
根据用户的id
删除指定用户。
4. 数据库操作
- 增:通过
db.session.add()
将新用户添加到数据库会话中。 - 查:通过
User.query.all()
查询所有用户,User.query.get(id)
根据id
查询单个用户。 - 改:获取用户对象后,修改属性并提交更改。
- 删:获取用户对象后,使用
db.session.delete()
删除用户。
5. 启动应用
-
启动 Flask 应用:
python app.py
-
测试接口: 你可以使用 Postman 或任何 HTTP 客户端工具来测试增、删、改、查的 API。
- POST 请求到
http://127.0.0.1:5000/add_user
来添加新用户。 - GET 请求到
http://127.0.0.1:5000/get_users
来获取所有用户。 - GET 请求到
http://127.0.0.1:5000/get_user/1
来获取指定id
的用户。 - PUT 请求到
http://127.0.0.1:5000/update_user/1
来更新用户信息。 - DELETE 请求到
http://127.0.0.1:5000/delete_user/1
来删除指定id
的用户。
- POST 请求到
6. 总结
通过以上步骤,你已经成功实现了一个简单的 CRUD(增删改查)API,用于管理用户信息,并且使用 Flask-SQLAlchemy
与 MySQL 数据库进行交互。你可以根据需要进一步扩展和优化功能。