2016-09-30 7 views
5

में इंडेक्स सीमा निर्धारित करना मैं Column परिभाषा के भीतर या केवल Index कन्स्ट्रक्टर के भीतर किसी सूचकांक के लिए अधिकतम सीमा सेट अप करना चाहता हूं लेकिन मुझे इसे प्राप्त करने का कोई तरीका नहीं दिख रहा है।SQLAlchemy

मूल रूप से, मैं इस MySQL व्यवहार अनुकरण करने के लिए करना चाहते हैं:

CREATE TABLE some_table (
    id int(11) NOT NULL AUTO_INCREMENT, 
    some_text varchar(2048) DEFAULT NULL, 
    PRIMARY KEY (id), 
    KEY some_text (some_text(1024)), # <- this line 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED; 

SQLAlchemy में मैं की तरह कुछ होगा:

class SomeTable(BaseModel): 
    __tablename__ = 'some_table' 
    __seqname__ = 'some_table_id_seq' 

    id = sa.Column(sa.Integer(11), sa.Sequence(__seqname__), primary_key=True) 
    some_text = sa.Column(sa.String(2048), index=True) # <- this line 

लेकिन मैं कुछ भी है कि की सीमा सुझाव है कि नहीं मिल सकता है सूचकांक अनुकूलित किया जा सकता है। की तरह कुछ:

some_text = sa.Column(sa.String(2048), index=True, index_length=1024) 

मुझे लगता है के बाद से Column निर्माता के लिए इस विकल्प को Index निर्माता के लिए सिर्फ एक उपनाम है, वहाँ Index निर्माता में शामिल करने के लिए इस सेटिंग को अनुमति देने के लिए एक कस्टम परम है?

धन्यवाद!

+0

आप 'उपसर्ग' एक सूचकांक, आप के रूप में अच्छी लंबाई सिर्फ काफी देर तक आम तौर पर पंक्तियों भेद करने के लिए कर सकते हैं करना चाहिए । (1024 अत्यधिक गंध करता है।) –

उत्तर

8

मुझे लगता है कि आप की तरह कुछ कर सकते हैं:

class SomeTable(BaseModel): 
    __tablename__ = 'some_table' 
    __seqname__ = 'some_table_id_seq' 
    __table_args__ = (
     sa.Index("idx_some_text", "some_text", mysql_length=1024), 
) 
    id = sa.Column(sa.Integer(11), sa.Sequence(__seqname__), primary_key=True) 
    some_text = sa.Column(sa.String(2048)) 

संदर्भ: http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#index-length

+0

ठीक है, यह काम करता है! धन्यवाद @pcalessio – eberbis