But it's strange. I have all this code inside my default.py controller, inside web2py. Indeen, these 2 lines: query = db(db.table.field1=='What I am looking for') query.update(field2='hello') work perfectly even without the db.commit().
But, this code: query = db(db.table.field1=='What I am looking for') deletedRow = query.delete() is not working if I don't use the db.commit() instruction. I mean, it seems that the deletion is ok, it doesn't crash and doesn't return any error, but the database is not modified. El domingo, 30 de diciembre de 2012 14:17:29 UTC+1, Niphlod escribió: > > for future references: > > issuing db.commit() is necessary only if you're using DAL outside web2py. > As soon as the function in the controller is executed, a db.commit() is > issued automatically as long as no exceptions are thrown. > > query = db(db.table.field1=='What I am looking for') > query.update(field2='hello') > rows = query.select() > row = rows[0] > row.update_record() > > works ok, although there is no need for the last 3 lines to be executed. > > query = db(db.table.field1=='What I am looking for') > deletedRow = query.delete() > > works fine also. > > > On Sunday, December 30, 2012 11:49:05 AM UTC+1, Wonton wrote: >> >> Hello viniciusban! >> >> The line "db.commit()" solved these 2 problems, thank you very much! >> >> Regarding to why I used "update_record()" without parameters, I took it >> from an example I saw on Internet, maybe the example was wrong or maybe >> (probably) I missunderstood the example. >> >> Thank you very much again! >> >> El domingo, 30 de diciembre de 2012 01:57:15 UTC+1, viniciusban escribió: >>> >>> On Sat, Dec 29, 2012 at 10:19 PM, Wonton <rfer...@gmail.com> wrote: >>> > Hello everyone and happy new year! >>> >>> Hi. >>> >>> > >>> > I'm having an issue regarding the updating and deletion of a row in my >>> > tables and I can't find any solution, so I hope you can help me. >>> > >>> > 1) Regarding to the update: >>> > As far as I know, to update a row I should do something like this: >>> > query = db(db.table.field1=='What I am looking for') >>> > query.update(field2='hello') >>> > rows = query.select() >>> >>> Issue a db.commit() here >>> >>> > >>> > row = rows[0] >>> > row.update_record() >>> > >>> > But this is not working, it doesn't update the row. >>> >>> Probably you have a transaction issue. >>> >>> BTW, your update_record() doesn't change any field content. What are >>> you trying to do with it? >>> >>> >>> > >>> > So, I'm confused about the use of update and update_record, is ok if I >>> only >>> > use update(...)? >>> >>> Actually, update() would be preferred over update_record() because it >>> generates a SQL UPDATE statement. On the other hand, update_record() >>> generates a SQL UPDATE after the record has been read, via SQL SELECT. >>> >>> Thinking "transactionally", you should use update() all the time. >>> update_record() would be for a few situations. >>> >>> > >>> > 2) Regarding to the delete: >>> > I'm deleting a row with this code: >>> > query = db(db.table.field1=='What I am looking for') >>> > deletedRow = query.delete() >>> >>> Again, try to db.commit() here, after query.delete() >>> >>> > The problem is that if I open this table with Database AppAdmin and >>> refresh >>> > it, the (supposed deleted) row is still there. >>> > Is the row really deleted, I guess not, so what could I be doing >>> wrong? >>> >>> Remind Web2py issues an automatic db.commit() at the end of every >>> succesful request, but if you're in Web2py shell, there's no "end of >>> request". So, you should db.commit() by yourself. >>> >> --