#python #sqlalchemy
Вопрос:
Я использую Flask-SQLAlchemy с локальным размещением postgresql, и у меня есть этот код, в котором я должен обновить данные пользователя в базе данных, как только он войдет в систему
user_id = current_user.get_id()
print(f"nn user_id: {user_id}nn") #1--->
x = users.query.filter_by(id=user_id).first()
x.sid = request.sid
db.session.commit()
print(f'nn user_object.sid:{x.sid} , request.sid:{request.sid} nn') #2 --->
#1 : userid:1
#2 : x.sid:QKfGvdsL-HGUM-FHHYF, request.sid:QKfGvdsL-HGUM-FHHYF
но потом, когда я смотрю на pgadmin4 или запрашиваю значение x.sid позже, оно всегда «нулевое».
Я искал везде, и все, кажется, предлагают тот же способ, которым я писал свой код.
Стоит упомянуть :
sid column
был добавлен с помощью flask.migrate, он не был создан вместе с таблицей.- Просто чтобы убедиться, что в моем коде нет ничего, что перезаписывает послесловие значения, pgadmin4 переписал значение null на что-то уникальное, и оно осталось, с его значением ничего не произошло.
- я пытался использовать
db.session.add(x)
, но он продолжал говорить, что информация о данных уже существует
Ответ №1:
Вы могли бы попробовать:
db.session.merge(x)
db.session.commit()
Этот код создает новую строку, если она не существовала, в противном случае обновляет существующую.