if home is None: 
        home_id = db.home.insert(user=id_user)
        home = db.home(user=id_user)
    else:
        home_id = home.id

I google translator flip the code :S


El viernes 23 de marzo de 2012 13:31:13 UTC-4:30, www.diazluis.com escribió:
>
> sr. antonio has every reason
> after analyzing its response, the reasons are obvious DAL designed.
>
> the end the error of my logic (I apologize)
>
> missing return to the query of the data, after creating the record, I mean:
>
> if home is None:
>     db.home.insert home_id = (user = id_user)
>     db.home home = (user = id_user)
> else:
>     home_id = home.id
>
> and the system returns in view as follows:
> return dict (home=home, form=form)
>
>
>
> El viernes 23 de marzo de 2012 12:59:50 UTC-4:30, Anthony escribió:
>>
>> In web2py, each request is wrapped in a single database transaction -- 
>> that way if an error occurs somewhere in the processing of the request, any 
>> database changes can be rolled back automatically. It would not be 
>> desirable to immediately commit each change (i.e., each insert, update, 
>> delete, etc.) by default because when an error occurs during a request, you 
>> could end up with only partial (and therefore inconsistent) changes. If you 
>> need more fine-grained, control, though, you can call db.commit() and 
>> db.rollback() as necessary.
>>
>> Anthony
>>
>> On Friday, March 23, 2012 12:58:22 PM UTC-4, www.diazluis.com wrote:
>>>
>>> Greetings sr.
>>> Thanks for your time.
>>>
>>> your explanation makes sense but ...
>>>
>>> but I find it annoying to have to be running explicitly "db.commit ()"
>>> something as simple as what you showed you
>>>
>>> Waste time having to revise the code to see where failure to use 
>>> "db.commit ()" and so and keep it from bouncing an error like the one 
>>> mentioned.
>>>
>>> DAL internally in each operation should execute "db.commit ()" or 
>>> something (I have no technical knowledge to give a solution working)
>>>
>>>
>>> I justify the use of "db.commit ()"
>>> * If my app estubiera overloaded with queries to the database
>>> * Tubiera a background process working with the database
>>> * Operations on the database from a cycle "for"
>>>
>>> but NOT in the following steps:
>>>   1) check if a record exists
>>> 2) create the record if necessary
>>> 3) re-check the registry, to be used in crud.update
>>>
>>> I find that something is wrong
>>>
>>>
>>>
>>> El viernes 23 de marzo de 2012 09:24:41 UTC-4:30, Richard escribió:
>>>>
>>>> Most of the time in web2py you don't need to commit, but in particular 
>>>> scenario you maybe need to commit before an other operation because you 
>>>> need the database to be up to date before the and of your function.
>>>>
>>>>
>>>> http://web2py.com/books/​​​​default/chapter/29/6?search=​​​​db.commit%28%29<http://web2py.com/books/default/chapter/29/6?search=db.commit%28%29>
>>>>
>>>> Hope it helps
>>>>
>>>>
>>>> The following code gives me error if not explicitly use db.commit ()
>>>>> can someone explain why I now need to use db.commit () to something so 
>>>>> simple?
>>>>>
>>>>> models/home.py
>>>>>
>>>>> ##############
>>>>> id_user = (auth.user and auth.user.id) or None
>>>>>
>>>>> db.define_table('home',
>>>>>    Field('titulo', 'string', length=64, default='titulo de prueba'),
>>>>>    Field('texto', 'text', length=5000, default='texto de prueba'),
>>>>>    Field('user', db.auth_user, default=id_user, writable=False,
>>>>> readable=False),
>>>>>
>>>>>    #auditoria
>>>>>    Field('ip', 'string', length=64,  default=request.client,
>>>>> update=request.client, writable=False, readable=False),
>>>>>    Field('fecha', 'date',default=request.now, update=request.now,
>>>>> writable=False, readable=False),
>>>>>    Field('user_update', db.auth_user, default=id_user,
>>>>> update=id_user, writable=False, readable=False),
>>>>> )
>>>>> ############
>>>>>
>>>>>
>>>>> controllers/default.py
>>>>> ##############
>>>>> def index():
>>>>>
>>>>>    if auth.is_logged_in() :
>>>>>        home = db.home(user=id_user)
>>>>>        if home is None: redirect(URL('update'))
>>>>>
>>>>>    return dict()
>>>>>
>>>>>
>>>>> @auth.requires_login()
>>>>> def update():
>>>>>
>>>>>    home = db.home(user=id_user)
>>>>>
>>>>>    if home is None:
>>>>>        home_id = db.home.insert(user=id_user)
>>>>>    else:
>>>>>        home_id = home.id
>>>>>
>>>>> #    db.commit()
>>>>>    form = crud.update(db.home, home_id, deletable=False, 
>>>>> next=URL('update'))
>>>>>
>>>>>    return dict(home=home, form=form)
>>>>> #############
>>>>>
>>>>>
>>>>> view/default/update.html
>>>>>
>>>>> {{extend 'layout.html'}}
>>>>>
>>>>>    <div>
>>>>>        <span id="span_home_titulo">{{ =home.titulo }}</span>
>>>>>    </div>
>>>>>    <div id="form_home" >
>>>>>        {{=form.custom.begin}}
>>>>>            {{ =form.custom.widget.titulo }}
>>>>>            {{ =form.custom.widget.texto }}
>>>>>            <input type="submit" value="Save" />
>>>>>        {{=form.custom.end}}
>>>>>    </div>
>>>>>
>>>>> ###############
>>>>>
>>>>>
>>>>> Error
>>>>> #########
>>>>>
>>>>> web2py™ (1, 99, 7, datetime.datetime(2012, 3, 4, 22, 12, 8), 'stable')
>>>>> Python  Python 2.6.6: /usr/bin/python
>>>>> TRACEBACK
>>>>>
>>>>> Traceback (most recent call last):
>>>>>  File "/home/diazluis2007/web2py/​​​​gluon/restricted.py", line 205, 
>>>>> in restricted
>>>>>    exec ccode in environment
>>>>>  File 
>>>>> "/home/diazluis2007/web2py/​​​​applications/about/views/​​​​default/update.html",
>>>>> line 80, in <module>
>>>>> AttributeError: 'NoneType' object has no attribute 'titulo'
>>>>>
>>>>>
>>>>>
>>>>> Díaz Luis
>>>>> Analista Programador Facultad de Odontología UC
>>>>> http://www.about.me/diazluis
>>>>> User Linux 532223
>>>>>
>>>>
>>>>

Reply via email to