首页 文章

使用datetime在web2py中定义当前年份的字段

提问于
浏览
0

我是Web2Py的新手,有以下问题:

我正在尝试定义一个数据库,并将当前年份作为一个字段,应该使用datetime自动填充 .

但是当我尝试打开数据库并查看条目时,我得到了一个我不理解的追溯(见下文) .

编辑:我认为它必须与strftime只有一个参数做一些事情 . 当我使用strftime(“%Y%m%d”)时,它工作得很好 . 但我真的只需要今年 .

谢谢

Code

导入日期时间

db.define_table('orders',            
                    Field("current_year", "string",default=datetime.datetime.now().strftime("%Y"),Label=T('Current Year'), readable=True, writable=False))

Code using IS_DATETIME

阅读web2py文档后我也尝试了这个:

导入日期时间

字段('current_year','string',label = T('Current Year'),default = IS_DATETIME(format = T('%Y')),readable = True,writable = False))

Traceback:

回溯(最近一次调用最后一次):文件“/home/PyCatUB/web2py/applications/contacts/controllers/appadmin.py”,第269行,在select 字段中,limitby =(start,stop))文件“/ 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(query,fields,attributes)文件”/ home / PyCatUB / web2py / gluon / packages / dal / pydal / adapters / base . py“,第1296行,在select中返回self._select_aux(sql,fields,attributes)文件”/home/PyCatUB/web2py/gluon/packages/dal/pydal/adapters/base.py“,第1253行,在_select_aux self中 . 执行(sql)文件“/home/PyCatUB/web2py/gluon/packages/dal/pydal/adapters/base.py”,第1388行,执行返回self.log_execute( a,** b)文件“/ home / PyCatUB / web2py / gluon / packages / dal / pydal / adapters / base.py“,第1382行,在log_execute中ret = self.get_cursor() . 执行(命令,* a [1:],** b)文件” /usr/lib/python2.7/sqlite3/dbapi2.py“,第66行,在convert_timestamp datepart中,timepart = val.split(”“)ValueError:需要多于1个值才能解压缩

2 回答

  • 2

    Field('current_year','string',label = T('Current Year'),
    默认= IS_DATETIME(格式= 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从头开始重新创建它使用新的字段类型 .

  • 0

    好像我修好了这个 . 出于某种原因,web2py不喜欢标签“current_year” . 我将其改为“curyear”,因为我感觉current_year可能是一个保留词 - 而且它有效 . 这可能是原因吗?

相关问题