You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何转换指定JSON并通过Flask-SQLAlchemy存入MySQL数据库?

没问题,我来一步步教你怎么把这段JSON数据通过Flask-SQLAlchemy存入MySQL数据库,分几个关键步骤来操作:

使用Flask-SQLAlchemy将JSON数据存入MySQL数据库

1. 定义数据库模型(对应JSON的一对多结构)

你的JSON里包含用户和关联事件,是典型的一对多关系(一个用户对应多个事件)。先基于这个结构定义SQLAlchemy模型:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

# 初始化Flask应用
app = Flask(__name__)

# 配置MySQL连接信息,替换成你自己的数据库账号、密码、主机和库名
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:your_password@localhost/your_db_name'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 关闭不必要的跟踪警告
db = SQLAlchemy(app)

# 用户模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    # 关联事件,级联操作确保删除用户时同步删除其事件
    events = db.relationship('Event', back_populates='user', cascade='all, delete-orphan')

# 事件模型
class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    event_name = db.Column(db.String(80), nullable=False)
    # 外键关联用户表的id字段
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    user = db.relationship('User', back_populates='events')

2. 创建数据库表

在存入数据前,需要先在MySQL中生成对应的表。可以通过以下代码创建:

with app.app_context():
    db.create_all()

执行后,MySQL中会自动生成user和event两张关联表。

3. 解析JSON数据并写入数据库

接下来处理你提供的JSON数据,将其转换为模型对象并保存到数据库:

import json

# 你的JSON数据(如果是字符串格式,先用json.loads()解析成字典)
json_data = {
    "users": [
        {
            "username": "userxyz",
            "id": 4,
            "email": "xyz@gmail.com",
            "events": [
                {"event_name": "vday"},
                {"event_name": "bday"}
            ]
        }
    ]
}

with app.app_context():
    try:
        # 遍历JSON中的每个用户
        for user_item in json_data['users']:
            # 先检查用户是否已存在(避免主键冲突)
            existing_user = User.query.get(user_item['id'])
            if not existing_user:
                # 创建新用户对象
                user = User(
                    id=user_item['id'],
                    username=user_item['username'],
                    email=user_item['email']
                )
                db.session.add(user)
            else:
                user = existing_user  # 复用已存在的用户
            
            # 遍历该用户的事件
            for event_item in user_item['events']:
                # 检查该用户下是否已有同名事件(可选,根据业务需求调整)
                existing_event = Event.query.filter_by(user_id=user.id, event_name=event_item['event_name']).first()
                if not existing_event:
                    event = Event(event_name=event_item['event_name'], user=user)
                    db.session.add(event)
        
        # 提交事务,写入数据库
        db.session.commit()
        print("数据成功存入数据库!")
    except Exception as e:
        # 出错时回滚事务,避免数据不一致
        db.session.rollback()
        print(f"存入数据时出错: {str(e)}")

关键注意事项

  • 数据库配置替换:一定要把SQLALCHEMY_DATABASE_URI里的参数换成你自己的MySQL信息,否则无法连接数据库。
  • 主键冲突处理:代码中通过User.query.get()检查用户是否已存在,如果需要更新已有用户的信息,可以在else块中添加字段更新逻辑。
  • 级联操作:模型里的cascade='all, delete-orphan'会让删除用户时自动删除其关联事件,不需要的话可以去掉这个参数。
  • 异常处理:try-except块能捕获数据格式错误、主键冲突等问题,确保数据库事务的一致性。

内容的提问来源于stack exchange,提问作者PJately

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:35:59