model and instance methods: session aware (sqlalchemy)

So, using and learning with sqlalchemy.

I have an instance, I need to get a value. If that value exists, return it. If not calculate and return it.

Invariably someone will say 'you're doing it wrong' and input on improvement is appreciated in general. However I am looking into how I can do this without explicitly having to manage the session, because what I'm working on is starting to grow, and constantly managing the session for when I want to update an instance is problematic. It makes me think that I am in fact doing it wrong.

So how do I fix the method below to not have manage the session explicitly?

def method(self, session):
        if self.i_needed_this is None:
            self.i_needed_this = calculate(calcutron)
            session.add(self)
            session.commit()
            return self.i_needed_this                        
        else:
            return self.i_needed_this

Maybe this question should be titled 'making instances session aware so I'm not always explicitly managing it', and if it's a dumb question, at least show me why with examples and point me to where others have asked better.

Edit: apparently, importing the session I'm using works, and it is available, so maybe its a non issue or a future one for when I am more skilled with sqlalchemy.

Answers


Your question is so common, that the answer to it is in the Session Frequently Asked Questions of SA documentation:

  • How can I get the Session for a certain object? Use the object_session() classmethod available on Session: session = Session.object_session(someobject)

However, it assumes the object is persistent and is either new (but added to a session already) or bound to a session. Your sample code contains logic to add the object to the session, so my assumption might not be true in this case.


See How can I get the Session for a certain object?:

  • You can use SA Runtime Inspection API:

    from sqlalchemy import inspect
    # ...
    # within instance method
    session = inspect(self).session
    
  • or object_session() method:

    from sqlalchemy.orm.session import Session
    # ...
    # within instance method
    session = Session.object_session(self)
    

Need Your Help

UIView set only side borders

objective-c ios cocoa-touch uiview

Is there a way to set the sides of the border of a UIView to one color and leave the top and the bottom another?

Getting Error 800a0e7a "Provider cannot be found. It may not be properly installed."

asp-classic

So I am going back to a project I created in College, so I can transfer it to PHP. I orginally coded it in ASP Classic.