我对Web2Py完全不熟悉并且遇到以下问题:
我正在尝试定义一个数据库,并将当前年份作为一个字段,应该使用datetime自动填充。
但是当我尝试打开数据库并查看条目时,我得到了一个我不理解的追溯(见下文)。
编辑:我认为它必须与strftime只有一个参数做一些事情。当我使用strftime(“%Y%m%d”)时,它工作正常。但我真的只需要当年。
谢谢
代码
导入日期时间
db.define_table('orders',
Field("current_year", "string",default=datetime.datetime.now().strftime("%Y"),Label=T('Current Year'), readable=True, writable=False))
使用IS_DATETIME的代码
阅读完web2py文档后,我也尝试了这个:
导入日期时间
Field('current_year','string',label = T('Current Year'),default = IS_DATETIME(format = T('%Y')),readable = True,writable = False))
回溯:
追踪(最近一次通话): 文件“/home/PyCatUB/web2py/applications/contacts/controllers/appadmin.py”,第269行,在select中 * fields,limitby =(开始,停止)) 文件“/home/PyCatUB/web2py/gluon/packages/dal/pydal/objects.py”,第2020行,在select中 return adapter.select(self.query,fields,attributes) 文件“/home/PyCatUB/web2py/gluon/packages/dal/pydal/adapters/sqlite.py”,第123行,在select中 return super(SQLiteAdapter,self).select(查询,字段,属性) 文件“/home/PyCatUB/web2py/gluon/packages/dal/pydal/adapters/base.py”,第1296行,在select中 return self._select_aux(sql,fields,attributes) 在_select_aux中输入文件“/home/PyCatUB/web2py/gluon/packages/dal/pydal/adapters/base.py”,第1253行 self.execute(SQL) 文件“/home/PyCatUB/web2py/gluon/packages/dal/pydal/adapters/base.py”,第1388行,执行 return self.log_execute(* a,** b) 在log_execute中输入“/home/PyCatUB/web2py/gluon/packages/dal/pydal/adapters/base.py”,第1382行 ret = self.get_cursor()。execute(command,* a [1:],** b) 在convert_timestamp中输入文件“/usr/lib/python2.7/sqlite3/dbapi2.py”,第66行 datepart,timepart = val.split(“”) ValueError:解包需要多于1个值
答案 0 :(得分:2)
Field('current_year', 'string', label=T('Current Year'), default=IS_DATETIME(format=T('%Y')), readable=True, writable=False))
上面,IS_DATETIME
是验证者。它旨在与字段的requires
属性一起使用。您不能将其与default
属性一起使用。在这种情况下,当您执行插入操作时,它将只插入该验证程序对象的字符串表示形式,其类似于'<gluon.validators.IS_DATETIME object at 0x000002202AC13CC0>'
。该字符串显然不是有效的日期时间字符串,因此当dbapi2.py
尝试将其解析为时间戳时,您会收到异常。
如果您只想存储年份,更好的方法可能只是使用整数类型并将年份存储为整数:
Field('current_year', 'integer', default=request.now.year)
如上面的评论中所述,SQLite不允许您更改现有字段的类型,因此如果您要为字段使用名称“current_year”,请首先删除现有表并让web2py重新创建它使用新的字段类型从头开始。
答案 1 :(得分:0)
似乎我修好了这个。出于某种原因,web2py不喜欢标签“current_year”。我把它变成了“curyear”,因为我觉得current_year可能是一个保留词 - 而且它有效。这可能是原因吗?