Как я могу обновить информацию о строке?
Например, я хотел бы изменить столбец имени строки с идентификатором 5.
python
sqlalchemy
flask-sqlalchemy
pocorschi
источник
источник
uesd_at = db.Column(db.DateTime)
я просто бегу,obj.used_at = datetime.datetime.now()
db.session.commit()
но не значение, установленное для поля.В
update
SQLAlchemy есть метод объекта BaseQuery, который возвращаетсяfilter_by
.Преимущество использования
update
перед изменением сущности возникает, когда нужно обновить много объектов.Если ты хочешь дать
add_user
разрешение на всеadmin
,Обратите внимание, что
filter_by
аргументы ключевого слова (используйте только один=
), а неfilter
выражение.источник
admin
, что может вводить в заблуждение, поскольку результатом будет количество обновленных строк. Не так ли?User
элементы по запросу, а не количество затронутых пользователей?Это не сработает, если вы измените маринованный атрибут модели. Для запуска обновлений необходимо заменить маринованные атрибуты:
источник
data
и переназначить.user.data = data
Простое присвоение значения и их фиксация будет работать для всех типов данных, кроме атрибутов JSON и Pickled. Поскольку маринованный тип объяснен выше, я отмечу несколько другой, но простой способ обновления JSON.
Допустим, модель такая же, как и выше.
Это добавит пользователя в базу данных MySQL с данными {"country": "Sri Lanka"}.
Изменение данных будет проигнорировано. Мой код, который не сработал, выглядит следующим образом.
Вместо того чтобы выполнять мучительную работу по копированию JSON в новый dict (без присвоения его новой переменной, как указано выше), что должно было сработать, я нашел простой способ сделать это. Есть способ отметить систему, что файлы JSON были изменены.
Ниже приведен рабочий код.
Это сработало как шарм. Существует предложено наряду с этим методом другой метод здесь надеюсь , что я помог какой - то один.
источник
db.session.merge(user)
добавление этого кода сработало для меня, FYI.