簡體   English   中英

SQLAlchemy-如何在提交/更新/查詢之前獲取對象的UUID?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM