我如何转换这个JSON,以便我可以使用Flask-SQLAlchemy将它添加到MySQL数据库?

时间:2018-02-16 23:04:01

标签: python mysql json flask flask-sqlalchemy

JSON

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

DB

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')

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

首先,您需要导入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')