Как вставить результат JSON в базу данных?

#python #rest #flask #flask-sqlalchemy #flask-restplus

#python #остальное #flask #flask-sqlalchemy #flask-restplus

Вопрос:

Я создаю простой REST, используя Flask-RESTPlus, чтобы получить все пользовательские данные GitHub от их конкретного имени пользователя.

Я получил результат в формате JSON. Но теперь я хочу вставить результат в свою базу данных.

Я объявил столбцы моей модели с одинаковыми именами с ключом в результате JSON. Вот фрагмент моей модели:

 class User(db.Model):
    __tablename__ = "user_v2"
    id = db.Column(db.Integer, primary_key=True, index=True)
    login = db.Column(db.String, unique=True, index=True)
    node_id = db.Column(db.String)
    avatar_url = db.Column(db.String)
  

и давайте скажем, что результат из API был таким:

 {
    "login": "trinanda",
    "id": 25479663,
    "node_id": "MDQ6VXNlcjI1NDc5NjYz",
    "avatar_url": "https://avatars2.githubusercontent.com/u/25479663?v=4"
}
  

Есть ключ к результату, который совпадает с именем моих столбцов в моих моделях.

Я пытался вставить результат с помощью этого кода, но меня смущает то, что он дает мне нулевое значение во всех моих пользовательских столбцах.

 class UserResource(Resource):

    def post(self):
        schema = UserSchema()
        github_field = request.json
        username = github_field.get('username')

        github_user_data = get_github_user_data(username)

        user = User(**github_user_data)

        try:
           db.session.add(user)
           db.session.commit()
        except Exception as e:
           return str(e)

        return {
             'status': 'success',
             'user': schema.dump(user).data
        }
  

Итак .. суть моих вопросов в том, как вставить результат JSON в базу данных ..?

РЕДАКТИРОВАТЬ: Вот мой github_user_data :

 import requests
github_scraper_url = 'https://api.github.com/users/'
def get_github_user_data(username):
    response = requests.get(github_scraper_url username)
    return response.json()
  

Комментарии:

1. github_user_data Заполняется ли? И точно ли это соответствует вашей пользовательской модели?

2. Вы не должны перехватывать Exception напрямую, вместо этого перехватывайте базовое исключение SQLAlchemy

3.Вот мой github_user_data: import requests github_scraper_url = 'https://api.github.com/users/' def get_github_user_data(username): response = requests.get(github_scraper_url username) return response.json()

4. Какой формат github_user_data вы получили, пожалуйста, скройте значения, если они являются конфиденциальными данными

5. flask-sqlalchemy документация (в конце первого раздела) не рекомендует против этого: «Если вы решите переопределить конструктор по какой-либо причине, убедитесь, что продолжаете принимать ** kwargs и вызываете суперконструктор с этими ** kwargs, чтобы сохранить это поведение«, так что вы МОЖЕТЕ переопределить конструктор и лучше контролировать то, что он делает, или даже проверить, что там происходит в целях отладки.