【问题标题】:How would I convert this JSON so that I can add it to a MySQL database using Flask-SQLAlchemy?我将如何转换这个 JSON,以便我可以使用 Flask-SQLAlchemy 将它添加到 MySQL 数据库中?
【发布时间】:2018-07-27 21:53:46
【问题描述】:

JSON

{"users": [{"username": "userxyz", "id": 4, "email": "xyz@gmail.com", "events": [{"event_name": "vday"} , {"event_name": "bday"}]}]}

数据库

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)
    events= db.relationship('Event', backref='user')

class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    event_name = db.Column(db.String(200), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

架构

class UserSchema(ma.ModelSchema):
        events = fields.Nested('EventSchema', many=True)

class Meta:
    model = User

class EventSchema(ma.ModelSchema):
    class Meta:
        model = Event
        exclude = ('id', 'user_id', 'user')

【问题讨论】:

  • 请提供您目前尝试过的代码。

标签: python mysql json flask flask-sqlalchemy


【解决方案1】:

首先你需要导入你的 json 文件:

import json
from pandas.io.json import json_normalize


with open("json_file_path_goes_here") as f:
    data = json.load(f)

# data = {"users": [{"username": "userxyz", 
#                    "id": 4, 
#                    "email": "xyz@gmail.com", 
#                    "events": [{"event_name": "vday"}, 
#                               {"event_name": "bday"}]
#                  }]
#        }

然后您可以使用json_normalize 以结构化格式获取它:

df = json_normalize(data["users"], "events", ["email", "id", "username"]).set_index('id')

#     event_name    email       username
# id            
# 4     vday    xyz@gmail.com   userxyz
# 4     bday    xyz@gmail.com   userxyz

从该数据框中,向您的数据库添加条目是一个简单的单行程序:

df.to_sql('User', engine, if_exists='append')

【讨论】:

    【解决方案2】:

    有这个东西 json.dumps(values) 你可以用它来转储数据。这会将你的 json 对象转换为 json 字符串,以便你可以将它插入到数据库中的文本字段中。 看看这个链接json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多