Maybe you should take the time to follow the official Pyramid tutorials,
they would answer many of your questions.

In common Pyramid apps (including yours, I suppose), SQL transactions are
controlled by HTTP "transactions", which is extremely convenient: if the
view fails, the SQL transaction is rolled back. If the view succeeds, the
SQL transaction is committed automatically. You never write
request.dbsession.commit().

Please, please, take the time to read the tutorials. I'm willing to help,
but I think this list is not the right place for debugging your app.

Le jeu. 16 nov. 2023 à 21:48, Oberdan Santos <sc.ober...@gmail.com> a
écrit :

> The new structure advanced, but presented another error that I don't know
> where to start and resolve it.
>
> @view_config(route_name='add', request_method='POST')
> def add(request):
>     id=request.POST['id']
>     name=request.POST['name']
>     idade=request.POST['idade']
>     data_nascimento=request.POST['data_nascimento']
>     sexo=request.POST['sexo']
>     raca=request.POST['raca']
>     fone=request.POST['fone']
>     endereco=request.POST['endereco']
>     cpf=request.POST['cpf']
>     cns=request.POST['cns']
>     pacientes=Paciente(id=id, name=name, idade=idade, data_nascimento=
> data_nascimento, sexo=sexo, raca=raca, fone=fone, endereco=endereco, cpf=
> cpf, cns=cns)
>     request.dbsession.add(pacientes)
>     request.dbsession.commit()
>     return HTTPFound(location='http://localhost:6543/lista')
>
> ERRO:
>   File
> "C:\Users\oberd\proj_piprdc\oberd\Lib\site-packages\zope\sqlalchemy\datamanager.py",
> line 333, in before_commit
>     or self.transaction_manager.get().status == ZopeStatus.COMMITTING
>        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> AssertionError: Transaction must be committed using the transaction manager
>
>
> Em quinta-feira, 16 de novembro de 2023 às 17:11:35 UTC-3, Laurent Daverio
> escreveu:
>
>> I think you want to write "request.dbsession.add(...)" instead.
>>
>> Function dbsession is not meant to be used directly, only to create
>> "request.dbsession", via "config.add_request_method(dbsession,
>> reify=True)". This way, in your code, you never have to declare or import
>> "dbsession", just use "request.dbsession" directly.
>>
>> Laurent.
>>
>> Le jeu. 16 nov. 2023 à 20:25, Oberdan Santos <sc.ob...@gmail.com> a
>> écrit :
>>
>>> Sua dica esta correta.  Fiz algumas alterações e percebi avanços. No
>>> entanto estou com o seguinte erro:
>>> File "C:\Users\oberd\proj_piprdc\piprdc\piprdc\views\default.py", line
>>> 87, in add
>>>     dbsession.add(pacientes)
>>>     ^^^^^^^^^^^^^
>>> AttributeError: 'function' object has no attribute 'add'
>>>
>>>
>>> #models/__init__.py
>>>
>>> from sqlalchemy import engine_from_config
>>> from sqlalchemy.orm import sessionmaker
>>> from sqlalchemy.orm import configure_mappers
>>> from sqlalchemy_continuum.plugins import Plugin
>>> import zope.sqlalchemy
>>>
>>> from .mymodel import Patient # flake8: noqa
>>>
>>> configure_mappers()
>>>
>>> def get_engine(settings, prefix='sqlalchemy.'):
>>>      return engine_from_config(settings, prefix)
>>>
>>> def get_session_factory(engine):
>>>      factory = sessionmaker()
>>>      factory.configure(bind=engine)
>>>      return factory
>>>
>>> def get_tm_session(session_factory, transaction_manager, request=None):
>>> dbsession = session_factory(info={"request": request})
>>>      zope.sqlalchemy.register(
>>>          dbsession, transaction_manager=transaction_manager
>>>      )
>>>      return dbsession
>>> def includeme(config):
>>>
>>>      settings = config.get_settings()
>>>      settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
>>>
>>>       config.include('pyramid_tm')
>>>
>>>      config.include('pyramid_retry')
>>>
>>>      # hook to share the dbengine fixture in testing
>>>      dbengine = settings.get('dbengine')
>>>      if not dbengine:
>>>          dbengine = get_engine(settings)
>>>
>>>      session_factory = get_session_factory(dbengine)
>>>      config.registry['dbsession_factory'] = session_factory
>>>
>>>      def dbsession(request):
>>>          dbsession = request.environ.get('app.dbsession')
>>>          if dbsession is None:
>>>               dbsession = get_tm_session(
>>>                  session_factory, request.tm, request=request
>>>       config.add_request_method(dbsession, reify=True)
>>>
>>> .................................................................
>>>
>>> #views/default.py
>>> from pyramid.view import view_config
>>> from pyramid.response import Response
>>> from sqlalchemy.exc import SQLAlchemyError
>>> from pyramid.httpexceptions import HTTPFound
>>> from ..models import Paciente
>>> from ..models import get_tm_session
>>> dbsession = get_tm_session
>>>
>>> @view_config(route_name='add', request_method='POST')
>>> def add(request):
>>>     id=request.POST['id']
>>>     name=request.POST['name']
>>>     idade=request.POST['idade']
>>>     data_nascimento=request.POST['data_nascimento']
>>>     sexo=request.POST['sexo']
>>>     raca=request.POST['raca']
>>>     fone=request.POST['fone']
>>>     endereco=request.POST['endereco']
>>>     cpf=request.POST['cpf']
>>>     cns=request.POST['cns']
>>>     pacientes=Paciente(id=id, name=name, idade=idade, data_nascimento=
>>> data_nascimento, sexo=sexo,
>>>                            raca=raca, fone=fone, endereco=endereco, cpf=
>>> cpf, cns=cns)
>>>     dbsession.add(pacientes)
>>>     dbsession.commit()
>>>     return HTTPFound(location='http://localhost:6543/')
>>>
>>> Já fiz algumas alterações, mas sem sucesso.
>>> ......
>>> Em quinta-feira, 16 de novembro de 2023 às 12:00:38 UTC-3, Laurent
>>> Daverio escreveu:
>>>
>>>> Hello, don't you have, by any chance, a URL like this in your frontend?
>>>>
>>>> '/mod_plataforma/mod1_plataforma/recepx/${save_url}'
>>>>
>>>> If so, you should replace the simple quotes with backticks:
>>>>
>>>> `/mod_plataforma/mod1_plataforma/recepx/${save_url}`
>>>>
>>>> To me, it looks like a Javascript typo, not a Pyramid error.
>>>>
>>>> Laurent.
>>>>
>>>> Le jeu. 16 nov. 2023 à 14:52, Oberdan Santos <sc.ob...@gmail.com> a
>>>> écrit :
>>>> >
>>>> > Hello!! I am facing a problem when trying to post data to the
>>>> database. When asking to send the application data I receive the following:
>>>> Squashed pyramid.httpexceptions.HTTPNotFound at
>>>> http://localhost:6543/mod_plataforma/mod1_plataforma/recepx/$%7Bsave_url%7D
>>>> >
>>>> > . Below is information about my files.
>>>> >
>>>> > # piprdc/piprdc/routes.py
>>>> > def includeme(config):
>>>> > config.add_static_view('static', 'static', cache_max_age=3600)
>>>> > config.add_route('home', '/')
>>>> > config.add_route('modulo_x', '/mod_plataforma')
>>>> > config.add_route('modulo1', '/mod_plataforma/mod1_plataforma')
>>>> > config.add_route('modulo2', '/mod_plataforma/mod2_plataforma')
>>>> > config.add_route('modulo3', '/mod_plataforma/mod3_plataforma')
>>>> > config.add_route('modulo4', '/mod_plataforma/mod4_plataforma')
>>>> > config.add_route('modulo5', '/mod_plataforma/mod5_plataforma')
>>>> > config.add_route('modulo6', '/mod_plataforma/mod6_plataforma')
>>>> > config.add_route('abcx', '/mod_plataforma/mod1_plataforma/recepx')
>>>> > config.add_route('add_reg',
>>>> '/mod_plataforma/mod1_plataforma/recepx/add_reg')
>>>> > config.add_route('query',
>>>> '/mod_plataforma/mod1_plataforma/recepx/query')
>>>> >
>>>> > ..............................
>>>> >
>>>> > #views/default.py
>>>> > from pyramid.view import view_config
>>>> > from pyramid.response import Response
>>>> > from sqlalchemy.exc import SQLAlchemyError, DBAPIError
>>>> > from pyramid.httpexceptions import HTTPFound
>>>> > from .. import models
>>>> > from ..models import Patient
>>>> > from ..models import get_tm_session
>>>> > dbsession = get_tm_session
>>>> >
>>>> > view_config(route_name='add_reg',
>>>> renderer='piprdc:templates/reg_pacx.jinja2')
>>>> > def add_reg(request):
>>>> > save_url = request.route_url('add_reg')
>>>> > request.route_url('query')
>>>> > print('RUN')
>>>> > if request.params:
>>>> > id=request.params['id']
>>>> > name=request.params['name']
>>>> > age=request.params['age']
>>>> > birth_date=request.params['birth_date']
>>>> > sex=request.params['sex']
>>>> > race=request.params['race']
>>>> > fone=request.params['fone']
>>>> > address=request.params['address']
>>>> > cpf=request.params['cpf']
>>>> > cns=request.params['cns']
>>>> > patients=Patient(id=id, name=name, age=age, date_birth=date_birth,
>>>> sex=sex,
>>>> > race=race, phone=phone, address=address, cpf=cpf, cns=cns)
>>>> > try:
>>>> > dbsession.add_reg(patients)
>>>> > return HTTPFound(location=request.route_url('query'))
>>>> > except DBAPIError:
>>>> > return Response("DB ERROR")
>>>> > else:
>>>> > print('DO NOT RUN')
>>>> > return{'save_url': save_url, 'project': 'piprdc'}
>>>> >
>>>> > ........................................
>>>> >
>>>> > #templates/reg_pacx.jinja2
>>>> > {% extends "basefull.jinja2" %}
>>>> > {% block container %}
>>>> > <html>
>>>> > <body>
>>>> > <h1><span class="font-semi-bold">Patient registration</span></h1>
>>>> > <form action="${save_url}" method="POST">
>>>> > <p>Patient Id: <input type="Integer" name="id"/> </p>
>>>> > <p>Patient Name: <input type="text" name="name"/> </p>
>>>> > <p>Age: <input type="Integer" name="age"/> </p>
>>>> > <p>Date of birth: <input type="Integer" name="date_birth"/> </p>
>>>> > <p>Gender: <input type="text" name="sex"/> </p>
>>>> > <p>Race: <input type="text" name="breed"/> </p>
>>>> > <p>Phone: <input type="text" name="phone"/> </p>
>>>> > <p>Address: <input type="text" name="address"/> </p>
>>>> > <p>CPF: <input type="Integer" name="cpf"/> </p>
>>>> > <p>CNS: <input type="Integer" name="cns"/> </p>
>>>> > <p><input type="submit" value="Submit"> </p>
>>>> > </body>
>>>> > </html>
>>>> > {% endblock container %}
>>>> >
>>>> > ................................
>>>> > #models/__init__.py
>>>> >
>>>> > from sqlalchemy import engine_from_config
>>>> > from sqlalchemy.orm import sessionmaker
>>>> > from sqlalchemy.orm import configure_mappers
>>>> > from sqlalchemy_continuum.plugins import Plugin
>>>> > import zope.sqlalchemy
>>>> >
>>>> > from .mymodel import Patient # flake8: noqa
>>>> >
>>>> > configure_mappers()
>>>> >
>>>> > def get_engine(settings, prefix='sqlalchemy.'):
>>>> > return engine_from_config(settings, prefix)
>>>> >
>>>> > def get_session_factory(engine):
>>>> > factory = sessionmaker()
>>>> > factory.configure(bind=engine)
>>>> > return factory
>>>> >
>>>> > def get_tm_session(session_factory, transaction_manager,
>>>> request=None):
>>>> > dbsession = session_factory(info={"request": request})
>>>> > zope.sqlalchemy.register(
>>>> > dbsession, transaction_manager=transaction_manager
>>>> > )
>>>> > return dbsession
>>>> > def includeme(config):
>>>> >
>>>> > settings = config.get_settings()
>>>> > settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
>>>> >
>>>> > config.include('pyramid_tm')
>>>> >
>>>> > config.include('pyramid_retry')
>>>> >
>>>> > # hook to share the dbengine fixture in testing
>>>> > dbengine = settings.get('dbengine')
>>>> > if not dbengine:
>>>> > dbengine = get_engine(settings)
>>>> >
>>>> > session_factory = get_session_factory(dbengine)
>>>> > config.registry['dbsession_factory'] = session_factory
>>>> >
>>>> > def dbsession(request):
>>>> > dbsession = request.environ.get('app.dbsession')
>>>> > if dbsession is None:
>>>> > dbsession = get_tm_session(
>>>> > session_factory, request.tm, request=request
>>>> > config.add_request_method(dbsession, reify=True)
>>>> >
>>>> > Any help is welcome.
>>>> >
>>>> > --
>>>> > You received this message because you are subscribed to the Google
>>>> Groups "pylons-discuss" group.
>>>> > To unsubscribe from this group and stop receiving emails from it,
>>>> send an email to pylons-discus...@googlegroups.com.
>>>> > To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/pylons-discuss/6c951fdb-95ea-440f-b3f7-81f93845dacfn%40googlegroups.com.
>>>>
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "pylons-discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to pylons-discus...@googlegroups.com.
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/pylons-discuss/5f8e5a02-858e-4abb-b582-994d780b5b63n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/pylons-discuss/5f8e5a02-858e-4abb-b582-994d780b5b63n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "pylons-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to pylons-discuss+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/pylons-discuss/b8acc6e1-a766-4939-9b5f-bc83871f1813n%40googlegroups.com
> <https://groups.google.com/d/msgid/pylons-discuss/b8acc6e1-a766-4939-9b5f-bc83871f1813n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to pylons-discuss+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pylons-discuss/CAB7cU6ztsDGRkg7dHfjLjOtmkbSwRMX-NJ%2BJD2y5Y3mct-SPDg%40mail.gmail.com.

Reply via email to