I just found what might be a bug, when using db.table.insert(field = value) it appears that the type of value isn't checked against the declared type of field. So for example you can declare a field to be of the date type, but then insert a record with a non-date value (at least in sqlite). I would have expected the DAL to give an error when attempting to do something like this, but it does not. However, when you then attempt to retrieve the inserted record, an error does occur. If you separate the db insert from the retrieval query and check in the database, you can see that "invalid" data has been stored in the database.
Granted, if you're using forms & validators then the data type conflict is caught before the insert, but I thought it may be something that should be pointed out - it isn't enough just to define data types in your model & expect web2py to always automatically enforce them. Sample Code: model.py ----------------------- db.define_table('mytable', Field('a_date_field', 'date') ) controllers/default.py -------------------------------- def date_insert(): my_date = '05/24/2011' #note, this is a string not a date type. Should have done datetime.strptime('05/24/2011','%m/%d/%Y) or date(2011,5,24) record = db.mytable.insert(a_date_field = my_date) results = db(db.mytable.id>0).select() return dict(results = results, record = record) Error Ticket: --------------------- Traceback (most recent call last): File "C:\Users\Brian\Documents\development\web2py\stable\web2py_src (1.95.1)\web2py\gluon\restricted.py", line 181, in restricted exec ccode in environment File "C:/Users/Brian/Documents/development/web2py/stable/web2py_src (1.95.1)/web2py/applications/date_test/controllers/default.py" <http://localhost:8000/admin/default/edit/date_test/controllers/default.py>, line 80, in <module> File "C:\Users\Brian\Documents\development\web2py\stable\web2py_src (1.95.1)\web2py\gluon\globals.py", line 133, in <lambda> self._caller = lambda f: f() File "C:/Users/Brian/Documents/development/web2py/stable/web2py_src (1.95.1)/web2py/applications/date_test/controllers/default.py" <http://localhost:8000/admin/default/edit/date_test/controllers/default.py>, line 41, in date_insert_test results = db(db.mytable.id>0).select() File "C:\Users\Brian\Documents\development\web2py\stable\web2py_src (1.95.1)\web2py\gluon\dal.py", line 5164, in select return self.db._adapter.select(self.query,fields,attributes) File "C:\Users\Brian\Documents\development\web2py\stable\web2py_src (1.95.1)\web2py\gluon\dal.py", line 1082, in select return self.parse(rows,self._colnames) File "C:\Users\Brian\Documents\development\web2py\stable\web2py_src (1.95.1)\web2py\gluon\dal.py", line 1291, in parse str(value)[:10].strip().split('-')] ValueError: invalid literal for int() with base 10: '05/24/2011'