Как обновить запись строки SQLAlchemy? - PullRequest
102 голосов
/ 12 марта 2012

Предположим, что таблица имеет три столбца: username, password и no_of_logins.

Когда пользователь пытается войти в систему, он проверяется на запись с запросом типа

user=User.query.filter_by(username=form.username.data).first()

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

Ответы [ 4 ]

275 голосов
/ 14 ноября 2014

Есть несколько способов UPDATE с использованием sqlalchemy

1) user.no_of_logins += 1
   session.commit()

2) session.query().\
       filter(User.username == form.username.data).\
       update({"no_of_logins": (User.no_of_logins +1)})
   session.commit()

3) conn = engine.connect()
   stmt = User.update().\
       values(no_of_logins=(User.no_of_logins + 1)).\
       where(User.username == form.username.data)
   conn.execute(stmt)

4) setattr(user, 'no_of_logins', user.no_of_logins+1)
   session.commit()
100 голосов
/ 12 марта 2012
user.no_of_logins += 1
session.commit()
3 голосов
/ 12 марта 2012

С помощью оператора user=User.query.filter_by(username=form.username.data).first() вы получите указанного пользователя в переменной user.

Теперь вы можете изменить значение новой переменной объекта, например user.no_of_logins += 1, и сохранить изменения с помощью метода фиксации session.

0 голосов
/ 05 февраля 2019

Я написал бот для Telegram, и у меня возникли проблемы с обновлением строк. Используйте этот пример, если у вас есть Модель

def update_state(chat_id, state):
    try:
        value = Users.query.filter(Users.chat_id == str(chat_id)).first()
        value.state = str(state)
        db.session.flush()
        db.session.commit()
        #db.session.close()
    except:
        print('Error in def update_state')

Зачем использовать db.session.flush ()? Вот почему >>> SQLAlchemy: в чем разница между flush () и commit ()?

...