SQLAlchemy Ottenere La Chiave Primaria Con Autoincrement Prima Di Commettere

Quando ho creato una tabella con un incremento automatico di chiave primaria, c’è un modo per ottenere ciò che la chiave primaria potrebbe essere (che è, fare qualcosa di simile riserva la chiave primaria) senza commettere?

Vorrei porre due operazioni all’interno di una transazione, tuttavia, una delle operazioni che dipendono dalla chiave primaria è stato assegnato nella precedente operazione.

InformationsquelleAutor | 2009-03-06

 

2 Replies
  1. 81

    Non hai bisogno di commit, è solo bisogno di flush. Ecco alcuni esempi di codice. Dopo la chiamata a filo è possibile accedere alla chiave primaria che è stato assegnato. Nota questo è con SQLAlchemy v1.3.6 e Python 3.7.4.

    from sqlalchemy import *
    import sqlalchemy.ext.declarative
    
    Base = sqlalchemy.ext.declarative.declarative_base()
    
    class User(Base):
        __tablename__ = 'user'
        user_id = Column('user_id', Integer, primary_key=True)
        name = Column('name', String)
    
    if __name__ == '__main__':
        import unittest
        from sqlalchemy.orm import *
        import datetime
    
        class Blah(unittest.TestCase):
            def setUp(self):
                self.engine = create_engine('sqlite:///:memory:', echo=True)
                self.sessionmaker = scoped_session(sessionmaker(bind=self.engine))
                Base.metadata.bind = self.engine
                Base.metadata.create_all()
                self.now = datetime.datetime.now()
    
            def test_pkid(self):
                user = User(name="Joe")
                session = self.sessionmaker()
                session.add(user)
                session.flush()
                print('user_id', user.user_id)
                session.commit()
                session.close()
    
        unittest.main()
    • Wow un abbondante +1 per un buon esempio di codice!
    • Per curiosità, questo è attualmente ancora come disordinato moderna SQLAlchemy, v0.8.0? O ci sono modi più semplici?
    • session.save è session.add in questi giorni.
    • grazie, aggiornato

Lascia un commento