0
如果我使用下面的代碼...如果SQLAlchemy嘗試使用基於UUID的PK創建行,並且PK已經存在,會發生什麼情況?
import uuid
Column(Text(), default=lambda: uuid.uuid4().hex[:6], primary_key=True)
...和被剛剛創建的新行恰好有相同的6位的UUID現有的,會發生什麼?有沒有辦法抓住它,並創建另一個UUID?
如果我使用下面的代碼...如果SQLAlchemy嘗試使用基於UUID的PK創建行,並且PK已經存在,會發生什麼情況?
import uuid
Column(Text(), default=lambda: uuid.uuid4().hex[:6], primary_key=True)
...和被剛剛創建的新行恰好有相同的6位的UUID現有的,會發生什麼?有沒有辦法抓住它,並創建另一個UUID?
很有可能會引發IntegrityError
異常。您可以嘗試使用除了塊以外的方法,或者使用do_execute
事件做一些技巧,但使其成爲非問題的最簡單方法是將服務器端的UUID生成設置爲列默認值。
我確實最終在服務器端設置了它,並在PostgreSQL中有一個函數。與SQLAlchemy一起使用的列定義類似於'id = Column(Text,primary_key = True,server_default = expression.text(「my_uuid_function()」))' – neRok 2014-10-14 07:35:07