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.