You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
984 B
Python
33 lines
984 B
Python
from sqlalchemy import Column, BigInteger, DateTime
|
|
from sqlalchemy.ext.compiler import compiles
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.schema import CreateColumn
|
|
from sqlalchemy.sql import expression
|
|
from sqlalchemy.types import DateTime as DatetimeType
|
|
|
|
Base = declarative_base()
|
|
|
|
|
|
class utcnow(expression.FunctionElement):
|
|
type = DatetimeType()
|
|
|
|
|
|
@compiles(utcnow, "postgresql")
|
|
def pg_utcnow(element, compiler, **kw):
|
|
return "TIMEZONE('utc', CURRENT_TIMESTAMP)"
|
|
|
|
|
|
@compiles(CreateColumn, 'postgresql')
|
|
def use_identity(element, compiler, **kw):
|
|
text = compiler.visit_create_column(element, **kw)
|
|
text = text.replace("SERIAL", "INT GENERATED BY DEFAULT AS IDENTITY")
|
|
return text
|
|
|
|
|
|
class DBMixin:
|
|
id = Column(BigInteger, primary_key=True)
|
|
created_date = Column(DateTime(timezone=True), server_default=utcnow())
|
|
modified_date = Column(
|
|
DateTime(timezone=True), server_default=utcnow(), onupdate=utcnow()
|
|
)
|