Flask中实现对User模型的增删改查,并通过Flask-Alchemy与MySQL数据库交互

为了在 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. 启动应用

  1. 启动 Flask 应用:

    python app.py
    
  2. 测试接口: 你可以使用 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 的用户。

6. 总结

通过以上步骤,你已经成功实现了一个简单的 CRUD(增删改查)API,用于管理用户信息,并且使用 Flask-SQLAlchemy 与 MySQL 数据库进行交互。你可以根据需要进一步扩展和优化功能。

Flask 是一个轻量级的 Web 应用框架,它本身不直接提供数据库操作的功能,但可以通过扩展库如 Flask-SQLAlchemy实现数据库交互。以下是一个基本的 Flask 数据库交互实现数据增删改查的示例: 1. 安装 Flask-SQLAlchemy 扩展库: ```bash pip install Flask-SQLAlchemy ``` 2. 在 Flask 应用中配置数据库: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = '数据库类型://用户名:密码@主机地址:端口号/数据库名' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 可选配置,防止额外的信号跟踪 db = SQLAlchemy(app) ``` 3. 定义模型(即数据库表结构): ```python class User(db.Model): 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 '<User %r>' % self.username ``` 4. 实现数据的增删改查操作: - 增加数据: ```python user = User(username='new_user', email='new_user@example.com') db.session.add(user) db.session.commit() ``` - 查询数据: ```python # 查询所有用户 users = User.query.all() for user in users: print(user.username) # 查询特定用户 user = User.query.filter_by(username='some_user').first() print(user.email) ``` - 更新数据: ```python user = User.query.filter_by(username='some_user').first() user.email = 'new_email@example.com' db.session.commit() ``` - 删除数据: ```python user_to_delete = User.query.filter_by(username='some_user').first() db.session.delete(user_to_delete) db.session.commit() ``` 请注意,上述代码仅为示例,实际使用时需要根据具体的数据库类型、数据库配置、模型设计以及业务逻辑进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BirdMan98

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值