首页 > sqlalchemy中add之后,不能直接返回对象属性么?

sqlalchemy中add之后,不能直接返回对象属性么?

通过sqlalchemy插入对象的时候,本意是插入后,就返回对象的唯一id
对象大概是这样的

class TestClass(BaseModel):
    __tablename__ = "tb_test"
    Id = Column('TestId', VARCHAR(36),default=lambda:str(uuid1()),unique=True,primary_key=True)
    Other = Column('Other', VARCHAR(256))
    

def test_add(other):
    u = TestClass()
    u.Other = other
    session = database.get_session()
    try:
        session.add(u)
        session.commit()
        session.close()
        return u.Id
     except:
         return false    

但是实际运行时,发现无法return u.Id


做如下改动后就可以获得u.Id了。

def test_add(other):
    u = TestClass()
    u.Other = other
    session = database.get_session()
    try:
        session.add(u)
        session.commit()
        return u.Id
    except:
        return false
    finally:
        session.close() 

首先default参数对应的python callable是在真正insert时才开始执行的并且执行后也不会对Id赋值。
在commit后执行u.Id实际会发起一次查询并得到真正插入的uuid,但在close后由于session已经关闭就没法进行查询获取Id了。
整个SQL执行过程你可以通过在调用create_engine传入echo=True参数看到。

【热门文章】
【热门文章】