Một chút thăm dò cho thấy sự khác biệt giữa hai:
Mục đích: db.tbl[0] = dict(name='something')
File "/var/web2py/gluon/globals.py", line 172, in <lambda>
self._caller = lambda f: f()
File "/var/web2py/applications/myapp/controllers/default.py", line 114, in test
db.tbl[0] = dict(name='something')
File "/var/web2py/gluon/dal.py", line 5531, in __setitem__
self.insert(**self._filter_fields(value))
File "/var/web2py/gluon/dal.py", line 5605, in insert
return self._db._adapter.insert(self,self._listify(fields))
Mục đích: db.tbl.insert(name='something')
File "/var/web2py/gluon/globals.py", line 172, in <lambda>
self._caller = lambda f: f()
File "/var/web2py/applications/myapp/controllers/default.py", line 115, in test
db.tbl.insert(name='something')
File "/var/web2py/gluon/dal.py", line 5605, in insert
return self._db._adapter.insert(self,self._listify(fields))
Cả hai người kết thúc cuộc gọi cùng một mã để làm chèn, vì vậy bạn sẽ thấy rằng họ chạy cùng một truy vấn:
INSERT INTO tbl(name) VALUES ('something');
Vì trước đây _filter_fields
như được hiển thị rõ ràng từ dấu vết, nó không ném ngoại lệ khi có các trường không có trong bảng, trong khi trường còn lại không có.
Rõ ràng, db.tbl[0] = newRow
không thể trả về giá trị. Bạn chỉ nên xem xét nó một cách viết tắt cho chèn và người anh em họ của nó db.tbl[x>0]
là cực kỳ hữu ích cho các bản cập nhật và có ký hiệu chính xác giống nhau và điều này giúp đơn giản hóa mã.