Как мне преобразовать этот 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')