2013-12-12 75 views
16

我在SQLAlchemy中定義的所有表都有一個類型爲UUID的id列。如何使用SQLAlchemy將列默認設置爲PostgreSQL函數?

from sqlalchemy.ext.declarative import declarative_base 
from uuid import uuid4 
Base = declarative_base() 

class MyTable(Base): 
    id = Column(UUIDtype, default=uuid4, primary_key=True) 

哪裏UUIDtype是PostgreSQL的UUID類型特殊列類型。這在PostgreSQL中成功創建了UUID列,但是在使用SQLAlchemy插入時僅生成默認的UUID值。這對我的一些用例來說很好,但是我希望在SQLAlchemy之外發生插入時在PostgreSQL端分配列的默認值。

塔上的以下SQL命令的地方適當的默認:

ALTER TABLE my_table ALTER COLUMN id SET DEFAULT uuid_generate_v4() 

我如何分配此uuid_generate_v4()功能通過SQLAlchemy的模型定義的列默認?如果唯一的選擇是通過執行原始SQL語句,是否有辦法讓我將該語句的執行掛鉤到表創建過程中?

回答

20

您應該爲此使用server_default參數。

id = Column(UUIDtype, server_default=text("uuid_generate_v4()"), primary_key=True) 

查看Server Side Defaults瞭解更多信息。

+0

謝謝。這正是我需要的。 –

+1

用'create extension uuid-ossp'安裝'uuid-ossp'模塊 – mozillazg

+0

或者使用'gen_random_uuid()'而不是'uuid_generate_v4()'並用'create extension pgcrypto'安裝'pgcrypto' – mozillazg

相關問題