sql >> Database teknologi >  >> RDS >> Mysql

SqlAlchemy TIMESTAMP 'ved opdatering' ekstra

Tilsyneladende er problemet ikke relateret til SqlAlchemy, men med den underliggende MySQL-motor. Standardadfærden er at indstille on update CURRENT_TIMESTAMP i den første TIMESTAMP-kolonne i en tabel.

Denne adfærd er beskrevet her . Så vidt jeg forstår, er en mulig løsning at starte MySQL med --explicit_defaults_for_timestamp=FALSE flag. En anden løsning kan findes her . Jeg har ikke prøvet nogen af ​​løsningerne endnu. Jeg vil opdatere dette svar, så snart jeg har løst problemet.

EDIT:Jeg prøvede den anden metode, og den er ikke særlig praktisk, men den virker. I mit tilfælde oprettede jeg et sæt af tabellerne, som ikke har en created_at attribut og så har jeg ændret alle de resterende tabeller som beskrevet i linket ovenfor.

Noget i retning af:

_no_alter = set(['tables', 'which', 'do not', 'have', 'a created_at', 'column'])
Base.metadata.create_all(engine)
for table in Base.metadata.tables.keys():
    if table not in _no_alter:
      engine.execute(text('ALTER TABLE {} MODIFY created_at TIMESTAMP NOT NULL DEFAULT 0'.format(table)))

EDIT2:en anden (nemmere) måde at opnå dette på er ved at indstille en server_default i SqlAlchemy værdi for kolonnen:

created_at = Column(TIMESTAMP, default=datetime.utcnow, nullable=False, server_default=text('0'))


  1. Oracle - Opret kun et indeks, hvis det ikke findes

  2. Hvordan begrænser man størrelsen på resultatsæt for vilkårlig forespørgsel i Ingres?

  3. Ekko specifikke rækker fra en mysql-database

  4. Hvordan udfører man left join i Hibernate Query Language?