Как вы получаете SQLAlchemy переопределить MySQL "при обновлении CURRENT_TIMESTAMP" - PullRequest
3 голосов
/ 16 марта 2010

Я унаследовал более старую базу данных, которая была настроена с полем «on update CURRENT_TIMESTAMP», которое должно описывать только создание элемента. В PHP я использовал «timestamp = timestamp» в предложениях UPDATE, но в SQLAlchemy я не могу заставить систему использовать установленную метку времени.

У меня нет выбора, и мне нужно обновить таблицу MySQL (миллионы строк)?

foo = session.query(f).get(int(1))
ts = foo.timestamp
setattr(foo, 'timestamp', ts)
setattr(foo, 'bar', bar)
www_model.www_Session.commit()

Я также пробовал:

foo = session.query(f).get(int(1))
setattr(foo, 'timestamp', foo.timestamp)
setattr(foo, 'bar', bar)
www_model.www_Session.commit()

1 Ответ

6 голосов
/ 16 марта 2010

SQLAlchemy не пытается установить поле, потому что считает, что значение не изменилось.

Вы можете указать SQLAlchemy переназначить значение, указав атрибут Onupdate в столбце:

 Column('timestamp', ..., onupdate=literal_column('timestamp'))

Это приведет к тому, что SQLAlchemy автоматически добавит timestamp=timestamp ко всем запросам на обновление.

Если вам нужно сделать это один раз для экземпляра, вы можете назначить ему столбец:

foo.timestamp = literal_column('timestamp')
# or 
foo.timestamp = foo_tbl.c.timestamp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...