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_time
和valid_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)
这里出的,但是不知道如何改,请教大神。
你的需求可以通过设置python function作为Column的default参数来满足。