flask-sqlalchemy创建模型时间问题

新手上路,请多包涵
class Code(db.Model):
    __tablename__ = 'code'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    vcode = db.Column(db.String(10), nullable=False)   # 验证码
    code_type = db.Column(db.Integer, nullable=False)   # 验证码类型:0,注册;1:登录
    send_time = db.Column(db.DateTime, default=datetime.now, nullable=False)    # 发送时间
    valid_time = db.Column(db.DateTime, default=(send_time+timedelta(minutes=5)), nullable=False)    # 有效时间
    receive_type = db.Column(db.Integer, nullable=False)   # 接收类型:0,手机;1,邮箱
    receive = db.Column(db.String(100), nullable=False)   # 接收方

有一个Code模型,其中有两个时间字段,send_timevalid_time
send_time是默认为创建模型时的时间,我的目的是想valid_time默认为send_time的五分钟后,
我的代码是valid_time = db.Column(db.DateTime, default=(send_time+timedelta(minutes=5)), nullable=False) # 有效时间
然后我插入数据如下:

code1 = Code(vcode="123123", code_type=0, receive_type=0, receive="15312345678", is_valid=1, user_id=40)
db.session.add(code1)
db.session.commit()

结果报错:

sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1292, "Truncated incorrect DOUBLE value: '1970-01-01 00:05:00'") [SQL: 'INSERT INTO code (vcode, code_type, send_time, valid_time, receive_type, receive, is_valid, user_id) VALUES (%(vcode)s, %(code_type)s, %(send_time)s, (code.send_time + %(param_1)s), %(receive_type)s, %(receive)s, %(is_valid)s, %(user_id)s)'] [parameters: {'send_time': datetime.datetime(2017, 10, 8, 20, 34, 57, 162068), 'vcode': '123123', 'receive_type': 0, 'code_type': 0, 'param_1': datetime.datetime(1970, 1, 1, 0, 5), 'is_valid': 1, 'user_id': 40, 'receive': '15312345678'}]

网上搜索的结果是mysql连接符有问题,我猜测是default=(send_time+timedelta(minutes=5)这里出的,但是不知道如何改,请教大神。

阅读 7.3k
1 个回答

你的需求可以通过设置python function作为Column的default参数来满足。

def get_valid_time(context):
    return context.get_current_parameters()['send_time']+timedelta(minutes=5)
    
valid_time = db.Column(db.DateTime, default=get_valid_time, nullable=False) 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题