【问题标题】:sqlalchemy not setting timestmap defaultsqlalchemy 未设置时间戳默认值
【发布时间】:2015-10-12 13:25:17
【问题描述】:

对于DateTime 列,SQLAlchemy 不尊重 default=datetime.datetime.utcnowdefault=func.now()(我都尝试过)。

Python:

class DataStuff(BASE): 
    """some data""" 
    __tablename__ = 'datastuff' 
    _id = Column(Integer, primary_key=True) 
    _name = Column(String(64)) 
    json = Column(sqlalchemy.UnicodeText()) 
    _timestamp = Column(DateTime, default=datetime.datetime.utcnow) 

MySQL:

mysql> describe datastuff;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| _id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| _name         | varchar(64)  | YES  |     | NULL    |                |
| json          | text         | YES  |     | NULL    |                |
| _timestamp    | datetime     | YES  |     | NULL    |                |

【问题讨论】:

    标签: python mysql datetime sqlalchemy


    【解决方案1】:

    根据使用server_default 的文档,当所需的操作是在CREATE TABLE 语句中的列上提供默认值时,可以采用这种方式。

    http://docs.sqlalchemy.org/en/rel_1_0/core/defaults.html

    我最终将server_defaultfunc.now() 函数一起使用,而不是default=datetime.datetime.utcnow

    新代码:

    from sqlalchemy import func
    _timestamp = Column(DateTime, server_default=func.now()) 
    

    结果:

    +---------------+--------------+------+-----+-------------------+----------------+
    | Field         | Type         | Null | Key | Default           | Extra          |
    +---------------+--------------+------+-----+-------------------+----------------+
    | _timestamp    | datetime     | YES  |     | CURRENT_TIMESTAMP |                |
    

    中提琴

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多