In the following code after 5 seconds sleep I expect the second part of date_updated
to be changed, but only the millisecond part is changed. If I use database_url = 'sqlite:///:memory:'
it works as expected. Why?
<code>class Base(MappedAsDataclass, DeclarativeBase):
pass
class Test(Base):
__tablename__ = 'test'
test_id: Mapped[int] = mapped_column(primary_key=True, init=False)
name: Mapped[str]
date_created: Mapped[datetime] = mapped_column(
TIMESTAMP(timezone=True),
insert_default=func.now(),
init=False
)
date_updated: Mapped[datetime] = mapped_column(
TIMESTAMP(timezone=True),
nullable=True,
insert_default=None,
onupdate=func.now(),
init=False
)
database_url: URL = URL.create(
drivername='postgresql+psycopg',
username='my_username',
password='my_password',
host='localhost',
port=5432,
database='my_db'
)
engine = create_engine(database_url, echo=True)
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
with Session(engine) as session:
test = Test(name='foo')
session.add(test)
session.commit()
print(test)
time.sleep(5)
test.name = 'bar'
session.commit()
print(test.date_created.time()) # prints: 07:50:26.34663
print(test.date_updated.time()) # prints: 07:50:26.358197
</code>
<code>class Base(MappedAsDataclass, DeclarativeBase):
pass
class Test(Base):
__tablename__ = 'test'
test_id: Mapped[int] = mapped_column(primary_key=True, init=False)
name: Mapped[str]
date_created: Mapped[datetime] = mapped_column(
TIMESTAMP(timezone=True),
insert_default=func.now(),
init=False
)
date_updated: Mapped[datetime] = mapped_column(
TIMESTAMP(timezone=True),
nullable=True,
insert_default=None,
onupdate=func.now(),
init=False
)
database_url: URL = URL.create(
drivername='postgresql+psycopg',
username='my_username',
password='my_password',
host='localhost',
port=5432,
database='my_db'
)
engine = create_engine(database_url, echo=True)
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
with Session(engine) as session:
test = Test(name='foo')
session.add(test)
session.commit()
print(test)
time.sleep(5)
test.name = 'bar'
session.commit()
print(test.date_created.time()) # prints: 07:50:26.34663
print(test.date_updated.time()) # prints: 07:50:26.358197
</code>
class Base(MappedAsDataclass, DeclarativeBase):
pass
class Test(Base):
__tablename__ = 'test'
test_id: Mapped[int] = mapped_column(primary_key=True, init=False)
name: Mapped[str]
date_created: Mapped[datetime] = mapped_column(
TIMESTAMP(timezone=True),
insert_default=func.now(),
init=False
)
date_updated: Mapped[datetime] = mapped_column(
TIMESTAMP(timezone=True),
nullable=True,
insert_default=None,
onupdate=func.now(),
init=False
)
database_url: URL = URL.create(
drivername='postgresql+psycopg',
username='my_username',
password='my_password',
host='localhost',
port=5432,
database='my_db'
)
engine = create_engine(database_url, echo=True)
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
with Session(engine) as session:
test = Test(name='foo')
session.add(test)
session.commit()
print(test)
time.sleep(5)
test.name = 'bar'
session.commit()
print(test.date_created.time()) # prints: 07:50:26.34663
print(test.date_updated.time()) # prints: 07:50:26.358197