Как мне преобразовать этот JSON, чтобы я мог добавить его в базу данных MySQL с помощью Flask-SQLAlchemy?

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

Schemas

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 ответа

Решение

Есть такая вещь json.dumps(значения), которую вы можете использовать для вывода данных. Это преобразует ваш объект json в строку json, чтобы вы могли вставить ее в текстовое поле в вашей базе данных. посмотрите на эту ссылку JSON

Сначала вы захотите импортировать файл 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')
Другие вопросы по тегам