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