How to “reconnect” an ORM object or list of such objects with the database?












0















My understanding is that the following code will return an error:



from src.mysqlClient import db_session
from src.mysqlClient.models import AdvertDom

with db_session() as session:
advert_doms = session.query(AdvertDom).all()

for advert_dom in advert_doms:
print(advert_dom.HTMLContent)


My understanding is that the error is caused by the session ending, which disconnects the advert_doms list from the database.





If I have a function that returns an ORM object or list of ORM objects, how can I have the objects later "reconnect" with the database so that the code above would work?



Here's an example of what I mean:



from src.mysqlClient import db_session
from src.mysqlClient.models import AdvertDom

def function_one():
with db_session() as session:
advert_doms = session.query(AdvertDom).all()
return advert_doms

def function_two()
advert_doms = function_one()

# TODO: Do something here so that the code below will work.

for advert_dom in advert_doms:
print(advert_dom.HTMLContent)









share|improve this question



























    0















    My understanding is that the following code will return an error:



    from src.mysqlClient import db_session
    from src.mysqlClient.models import AdvertDom

    with db_session() as session:
    advert_doms = session.query(AdvertDom).all()

    for advert_dom in advert_doms:
    print(advert_dom.HTMLContent)


    My understanding is that the error is caused by the session ending, which disconnects the advert_doms list from the database.





    If I have a function that returns an ORM object or list of ORM objects, how can I have the objects later "reconnect" with the database so that the code above would work?



    Here's an example of what I mean:



    from src.mysqlClient import db_session
    from src.mysqlClient.models import AdvertDom

    def function_one():
    with db_session() as session:
    advert_doms = session.query(AdvertDom).all()
    return advert_doms

    def function_two()
    advert_doms = function_one()

    # TODO: Do something here so that the code below will work.

    for advert_dom in advert_doms:
    print(advert_dom.HTMLContent)









    share|improve this question

























      0












      0








      0








      My understanding is that the following code will return an error:



      from src.mysqlClient import db_session
      from src.mysqlClient.models import AdvertDom

      with db_session() as session:
      advert_doms = session.query(AdvertDom).all()

      for advert_dom in advert_doms:
      print(advert_dom.HTMLContent)


      My understanding is that the error is caused by the session ending, which disconnects the advert_doms list from the database.





      If I have a function that returns an ORM object or list of ORM objects, how can I have the objects later "reconnect" with the database so that the code above would work?



      Here's an example of what I mean:



      from src.mysqlClient import db_session
      from src.mysqlClient.models import AdvertDom

      def function_one():
      with db_session() as session:
      advert_doms = session.query(AdvertDom).all()
      return advert_doms

      def function_two()
      advert_doms = function_one()

      # TODO: Do something here so that the code below will work.

      for advert_dom in advert_doms:
      print(advert_dom.HTMLContent)









      share|improve this question














      My understanding is that the following code will return an error:



      from src.mysqlClient import db_session
      from src.mysqlClient.models import AdvertDom

      with db_session() as session:
      advert_doms = session.query(AdvertDom).all()

      for advert_dom in advert_doms:
      print(advert_dom.HTMLContent)


      My understanding is that the error is caused by the session ending, which disconnects the advert_doms list from the database.





      If I have a function that returns an ORM object or list of ORM objects, how can I have the objects later "reconnect" with the database so that the code above would work?



      Here's an example of what I mean:



      from src.mysqlClient import db_session
      from src.mysqlClient.models import AdvertDom

      def function_one():
      with db_session() as session:
      advert_doms = session.query(AdvertDom).all()
      return advert_doms

      def function_two()
      advert_doms = function_one()

      # TODO: Do something here so that the code below will work.

      for advert_dom in advert_doms:
      print(advert_dom.HTMLContent)






      python sqlalchemy






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 1 at 16:32









      Nathan WailesNathan Wailes

      1,81831237




      1,81831237
























          1 Answer
          1






          active

          oldest

          votes


















          0














          The answer is to create a new session and do session.add(orm_object):



          from src.mysqlClient import db_session
          from src.mysqlClient.models import AdvertDom

          def function_one():
          with db_session() as session:
          advert_doms = session.query(AdvertDom).all()
          return advert_doms

          def function_two()
          advert_doms = function_one()
          with db_session() as session: # <-- New line of code
          for advert_dom in advert_doms:
          session.add(advert_dom) # <-- New line of code
          print(advert_dom.HTMLContent)




          The other way to avoid this problem is to just have a single global session object that doesn't get closed until both functions have run.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53997102%2fhow-to-reconnect-an-orm-object-or-list-of-such-objects-with-the-database%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            The answer is to create a new session and do session.add(orm_object):



            from src.mysqlClient import db_session
            from src.mysqlClient.models import AdvertDom

            def function_one():
            with db_session() as session:
            advert_doms = session.query(AdvertDom).all()
            return advert_doms

            def function_two()
            advert_doms = function_one()
            with db_session() as session: # <-- New line of code
            for advert_dom in advert_doms:
            session.add(advert_dom) # <-- New line of code
            print(advert_dom.HTMLContent)




            The other way to avoid this problem is to just have a single global session object that doesn't get closed until both functions have run.






            share|improve this answer




























              0














              The answer is to create a new session and do session.add(orm_object):



              from src.mysqlClient import db_session
              from src.mysqlClient.models import AdvertDom

              def function_one():
              with db_session() as session:
              advert_doms = session.query(AdvertDom).all()
              return advert_doms

              def function_two()
              advert_doms = function_one()
              with db_session() as session: # <-- New line of code
              for advert_dom in advert_doms:
              session.add(advert_dom) # <-- New line of code
              print(advert_dom.HTMLContent)




              The other way to avoid this problem is to just have a single global session object that doesn't get closed until both functions have run.






              share|improve this answer


























                0












                0








                0







                The answer is to create a new session and do session.add(orm_object):



                from src.mysqlClient import db_session
                from src.mysqlClient.models import AdvertDom

                def function_one():
                with db_session() as session:
                advert_doms = session.query(AdvertDom).all()
                return advert_doms

                def function_two()
                advert_doms = function_one()
                with db_session() as session: # <-- New line of code
                for advert_dom in advert_doms:
                session.add(advert_dom) # <-- New line of code
                print(advert_dom.HTMLContent)




                The other way to avoid this problem is to just have a single global session object that doesn't get closed until both functions have run.






                share|improve this answer













                The answer is to create a new session and do session.add(orm_object):



                from src.mysqlClient import db_session
                from src.mysqlClient.models import AdvertDom

                def function_one():
                with db_session() as session:
                advert_doms = session.query(AdvertDom).all()
                return advert_doms

                def function_two()
                advert_doms = function_one()
                with db_session() as session: # <-- New line of code
                for advert_dom in advert_doms:
                session.add(advert_dom) # <-- New line of code
                print(advert_dom.HTMLContent)




                The other way to avoid this problem is to just have a single global session object that doesn't get closed until both functions have run.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 12 at 12:36









                Nathan WailesNathan Wailes

                1,81831237




                1,81831237
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53997102%2fhow-to-reconnect-an-orm-object-or-list-of-such-objects-with-the-database%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

                    Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

                    A Topological Invariant for $pi_3(U(n))$