[英]SQLAlchemy - How to get object's UUID available before commit/update/query?
我正在努力嘗試在將主模型的主UUID存儲到數據庫之前自動實例化該主模型,我不想將對象提交到db中只是為了獲得可用的UUID。
下面的簡短摘錄來自我的實際代碼。
我想我需要將初始化附加到某些SQLAlchemy掛鈎中,但我不知道該如何或如何進行。
我有一個UUID助手,如下所示
class GUID(TypeDecorator):
impl = types.LargeBinary
...
在我使用的表中
class Row(Model,Base):
__tablename__ = "Row"
id = Column(GUID(), primary_key=True, default=uuid.uuid4)
row_text = Column(Unicode, index=True)
original_row_index = Column(Integer)
當我執行此測試時:
def test_uuid():
row_text = "Just a plain row."
irow = 0
row = Row(row_text, irow)
row.save()
row.commit()
if row.id == None:
print ("row.id == None")
else:
print ("row.id set")
row2 = Row(row_text, irow)
row2.save()
if row2.id == None:
print ("row2.id == None")
else:
print ("row2.id set")
它打印
row.id set row2.id == None
我使用的Model類如下:
class Model():
def __init__(self):
pass
def save(self):
db = Db.instance()
db.session.add(self)
def commit(self):
db = Db.instance()
db.session.commit()
我想您不應該使用commit
方法,而應該使用flush
方法: flush和commit之間的區別 。
刷新不要將信息存儲到硬盤上,而是在主鍵上創建所有更改:
主鍵屬性在生成后立即在flush()進程中填充,並且不需要調用commit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.