sqlalchemy flush() and get inserted id?

前端 未结 6 2021
北海茫月
北海茫月 2020-12-07 11:20

I want to do something like this:

f = Foo(bar=\'x\')
session.add(f)
session.flush()

# do additional queries using f.id before commit()
print f.id # should b         


        
6条回答
  •  执笔经年
    2020-12-07 11:33

    I've just run across the same problem, and after testing I have found that NONE of these answers are sufficient.

    Currently, or as of sqlalchemy .6+, there is a very simple solution (I don't know if this exists in prior version, though I imagine it does):

    session.refresh()

    So, your code would look something like this:

    f = Foo(bar=x)
    session.add(f)
    session.flush()
    # At this point, the object f has been pushed to the DB, 
    # and has been automatically assigned a unique primary key id
    
    f.id
    # is None
    
    session.refresh(f)
    # refresh updates given object in the session with its state in the DB
    # (and can also only refresh certain attributes - search for documentation)
    
    f.id
    # is the automatically assigned primary key ID given in the database.
    

    That's how to do it.

提交回复
热议问题