2013-12-12 15 views
16

Tất cả các bảng của tôi được xác định trong SQLAlchemy đều có một cột id thuộc loại UUID.Làm thế nào để đặt một cột mặc định thành một hàm PostgreSQL bằng cách sử dụng SQLAlchemy?

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) 

Trường hợp UUIDtype là loại cột đặc biệt cho loại UUID PostgreSQL. Điều này tạo thành công cột UUID trong PostgreSQL, nhưng chỉ tạo ra một giá trị UUID mặc định khi chèn bằng cách sử dụng SQLAlchemy. Điều này là tốt cho một số trường hợp sử dụng của tôi, nhưng tôi muốn gán mặc định của cột trên phía PostgreSQL của sự vật trong trường hợp một chèn xảy ra bên ngoài SQLAlchemy.

Sau đây nơi lệnh SQL mặc định thích hợp trên cột:

ALTER TABLE my_table ALTER COLUMN id SET DEFAULT uuid_generate_v4() 

Làm thế nào tôi có thể gán uuid_generate_v4() chức năng này như là mặc định cột thông qua định nghĩa mô hình SQLAlchemy? Nếu tùy chọn duy nhất là thông qua việc thực hiện một câu lệnh SQL thô, có cách nào để tôi thực hiện câu lệnh đó trong quá trình tạo bảng không?

Trả lời

20

Bạn nên sử dụng thông số server_default cho việc này.

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

Xem Server Side Defaults để biết thêm thông tin.

+0

Cảm ơn bạn. Đó chính xác là những gì tôi cần. –

+1

Cài đặt mô đun 'uuid-ossp' bằng' tạo phần mở rộng uuid-ossp' – mozillazg

+0

Hoặc sử dụng 'gen_random_uuid()' thay vì 'uuid_generate_v4()' và cài đặt 'pgcrypto' bằng' create extension pgcrypto' – mozillazg

Các vấn đề liên quan