Flask-SQLalchemy обновляет информацию о строке

Как я могу обновить информацию о строке?

Например, я хотел бы изменить столбец имен строки с идентификатором 5.

3 Solutions collect form web for “Flask-SQLalchemy обновляет информацию о строке”

Извлеките объект, используя учебник, показанный в документации Flask-SQLAlchemy . Когда у вас есть объект, который вы хотите изменить, измените сам объект. Затем db.session.commit() .

Например:

 admin = User.query.filter_by(username='admin').first() admin.email = 'my_new_email@example.com' db.session.commit() user = User.query.get(5) user.name = 'New Name' db.session.commit() 

Flask-SQLAlchemy основан на SQLAlchemy, поэтому обязательно зайдите в SQLAlchemy Docs .

Существует update метода для объекта BaseQuery в SQLAlchemy, которое возвращается filter_by .

 admin = User.query.filter_by(username=='admin').update(dict(email='my_new_email@example.com'))) db.session.commit() 

Преимущество использования update при изменении объекта происходит, когда есть много объектов для обновления.

Если вы хотите предоставить add_user для всех admin ,

 rows_changed = User.query.filter_by(role=='admin').update(dict(permission='add_user')) db.session.commit() 

Это не работает, если вы модифицируете маринованный атрибут модели. Маринованные атрибуты должны быть заменены для запуска обновлений:

 from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy from pprint import pprint app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqllite:////tmp/users.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=True) data = db.Column(db.PickleType()) def __init__(self, name, data): self.name = name self.data = data def __repr__(self): return '<User %r>' % self.username db.create_all() # Create a user. bob = User('Bob', {}) db.session.add(bob) db.session.commit() # Retrieve the row by its name. bob = User.query.filter_by(name='Bob').first() pprint(bob.data) # {} # Modifying data is ignored. bob.data['foo'] = 123 db.session.commit() bob = User.query.filter_by(name='Bob').first() pprint(bob.data) # {} # Replacing data is respected. bob.data = {'bar': 321} db.session.commit() bob = User.query.filter_by(name='Bob').first() pprint(bob.data) # {'bar': 321} # Modifying data is ignored. bob.data['moo'] = 789 db.session.commit() bob = User.query.filter_by(name='Bob').first() pprint(bob.data) # {'bar': 321} 
  • Присоединение к подзапросу в SQLAlchemy
  • SQLAlchemy + SQL Injection
  • SQLAlchemy: В чем разница между flush () и commit ()?
  • OperationalError: соединение MySQL недоступно
  • Python 'startswith' эквивалент для SqlAlchemy
  • SQLAlchemy, Flask: получить отношения из db.Model
  • Что происходит, когда пул соединений исчерпан?
  • Исходный родитель SQLAlchemy при изменении дочерних изменений
  • ImportError: нет модуля с именем sqlalchemy
  • сериализация класса sqlalchemy для json
  • Sqlalchemy динамически создает объединения
  • Python - лучший язык программирования в мире.