Hi,

I'm trying to have a deleted_at column on my records. I use MySQL and 
latest sqlalchemy as of writing. For historical reasons, I want to keep 
using the MySQL's TIMESTAMP columns.

I would like to use timezone-aware datetime throughout my codebase. 
Everything in my DB is stored as UTC, so I don't really need to store the 
timezone. I just want to make sure the datetime is returned as a 
UTC-datetime.

import pytz
from sqlalchemy import Column, text, types
from sqlalchemy.dialects.mysql import TIMESTAMP as M_TIMESTAMP


# Fractional second precision
FSP = 6
TIMESTAMP = M_TIMESTAMP(fsp=FSP)
CURRENT_TIMESTAMP = text("CURRENT_TIMESTAMP(%d)" % FSP)


class TimezoneAwareTimestamp(types.TypeDecorator):
    """Ensure tz-aware timestamp are returned."""


    impl = TIMESTAMP


    def process_result_value(self, value, dialect):
        if not value:
            return None
        return value.replace(tzinfo=pytz.UTC)


def DeletedAt():
    return Column("deleted_at", TimezoneAwareTimestamp, server_onupdate=text
("0"),
                  nullable=True)


This is a pretty natural solution I came up with. Problem: 
TimezoneAwareTimestamp does not respect the `server_onupdate` attribute on 
creation. A table created with this DeletedAt column will show up as:

deleted_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE 
CURRENT_TIMESTAMP(6)

instead of (replacing TimezoneAwareTimestamp with TIMESTAMP):

deleted_at` timestamp(6) NULL DEFAULT NULL

How can I have the custom type respect server_onupdate and nullable?

Thanks,

Charles

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/983a49db-ae3f-422a-b996-b176f76c5aa7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to