Defining a table with sqlalchemy with a mysql unix timestamp

前端 未结 2 1167
走了就别回头了
走了就别回头了 2021-01-13 14:56

Background, there are several ways to store dates in MySQ.

  1. As a string e.g. \"09/09/2009\".
  2. As integer using the function UNIX_TIMESTAMP() this is sup
2条回答
  •  暖寄归人
    2021-01-13 15:09

    I think there is a couple of issues with the type decorator you showed.

    1. impl should be sqlalchemy.types.Integer instead of DateTime.
    2. The decorator should allow nullable columns.

    Here's the what I have in mind:

    
    import datetime, time
    from sqlalchemy.types import TypeDecorator, DateTime, Integer
    
    class IntegerDateTime(TypeDecorator):
        """a type that decorates DateTime, converts to unix time on
        the way in and to datetime.datetime objects on the way out."""
        impl = Integer # In schema, you want these datetimes to
                       # be stored as integers.
        def process_bind_param(self, value, _):
            """Assumes a datetime.datetime"""
            if value is None:
                return None # support nullability
            elif isinstance(value, datetime.datetime):
                return int(time.mktime(value.timetuple()))
            raise ValueError("Can operate only on datetime values. "
                             "Offending value type: {0}".format(type(value).__name__))
        def process_result_value(self, value, _):
            if value is not None: # support nullability
                return datetime.datetime.fromtimestamp(float(value))
    

提交回复
热议问题