In the shell, the transaction won't actually be committed until you do db.commit() (in your app code, you do not have to call db.commit() because it will be called automatically at the end of the request). Also, when you use .insert(), the validators don't run -- they only run when using SQLFORM or when you insert via .validate_and_insert().
Anthony On Saturday, August 18, 2012 2:50:18 PM UTC-4, Mike Girard wrote: > > In preparation for doing a bulk insert into my app's tables I have been > doing some testing from the web2py shell. > > I issued the following command: > > >>db.person.insert(name = 'Dustin Hoffman') > > person.name has a unique=true setting as well as an IS_NOT_IN_DB form > constraint. Dustin Hoffman is already in the database. > > The response for running this command was an id number (118) suggesting > the record had been added. However, when I looked at the person records via > /myapplication/appadmin, it wasn't there and the id of the last record was > 117. This is fine, suggesting that the uniqueness constraint had been > applied. > > However, when I went back to the shell and issued this command - > > >> db.person(118) > > - It returned a row. Also > > >> db.person(name='Dustin Hoffman').count > >> 2 > > So it seems as if the duplicate record is in the db, though it doesn't > show up in the browser. > > Two questions, then: > > 1. Why is the duplicate record not showing up in /myapplication/appadmin > 2. If I want a script where duplicates are just rejected without special > handling, should I just use insert_and_validate? What if I am doing a bulk > insert or a csv import? > > --