2013-12-12 6 views
16

SQLAlchemy में परिभाषित मेरी सभी तालिकाओं में यूयूआईडी प्रकार का आईडी कॉलम है।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 में यूयूआईडी कॉलम सफलतापूर्वक बनाता है, लेकिन SQLAlchemy का उपयोग करते समय केवल एक डिफ़ॉल्ट यूयूआईडी मान उत्पन्न करता है। यह मेरे कुछ उपयोग मामलों के लिए ठीक है, लेकिन एसक्यूएलकेमी के बाहर कोई प्रविष्टि होने पर मैं पोस्टग्रेएसक्यूएल पक्ष पर स्तंभ के डिफ़ॉल्ट को असाइन करना चाहता हूं।

एसक्यूएल आदेश स्थानों निम्नलिखित स्तंभ पर उचित डिफ़ॉल्ट:

ALTER TABLE my_table ALTER COLUMN id SET DEFAULT uuid_generate_v4() 

मैं कैसे के माध्यम से SQLAlchemy मॉडल परिभाषा स्तंभ डिफ़ॉल्ट के रूप में इस uuid_generate_v4() समारोह असाइन कर सकते हैं? यदि एकमात्र विकल्प कच्चे एसक्यूएल कथन को निष्पादित करने के माध्यम से है, तो क्या मेरे लिए टेबल निर्माण प्रक्रिया में उस कथन के निष्पादन को हुक करने का कोई तरीका है?

उत्तर

20

आपको इसके लिए server_default पैरामीटर का उपयोग करना चाहिए।

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

अधिक जानकारी के लिए Server Side Defaults देखें।

+0

धन्यवाद। यही वही है जो मुझे चाहिए था। –

+1

'uuid-ossp' मॉड्यूल '' एक्सटेंशन एक्सटेंशन uuid-ossp' – mozillazg

+0

' के साथ स्थापित करें या 'uuid_generate_v4()' के बजाय 'gen_random_uuid()' का उपयोग करें और 'pgcrypto' को 'एक्सटेंशन एक्सटेंशन pgcrypto' के साथ इंस्टॉल करें – mozillazg

संबंधित मुद्दे