2010-12-31 10 views
6

हे! बस SQLAlchemy के साथ संयोजन के रूप में Pylons साथ काम करना शुरू, और मेरे मॉडल कुछ इस तरह दिखता है:पिलोन, एसक्यूलाइट और ऑटोइनक्रिएटिंग फ़ील्ड

from sqlalchemy import Column 
from sqlalchemy.types import Integer, String 

from helloworld.model.meta import Base 

class Person(Base): 
    __tablename__ = "person" 

    id = Column(Integer, primary_key=True) 
    name = Column(String(100)) 
    email = Column(String(100)) 

    def __init__(self, name='', email=''): 
     self.name = name 
     self.email = email 

    def __repr__(self): 
     return "<Person('%s')" % self.name 

SQLite पुन: उपयोग पहचान-पत्र कि हटा दिया गया है, मैं स्तंभ "आईडी" के लिए AutoIncrement जोड़ना चाहते हैं से बचने के लिए। मैंने sqlalchemy के लिए प्रलेखन को देखा है और देखा है कि sqlite_autoincrement जारी किया जा सकता है। एक उदाहरण जहां यह विशेषता दी गई है here पाया जा सकता है।

sqlite_autoincrement तालिका बनाने के दौरान जारी होने के बावजूद प्रतीत होता है, और मुझे आश्चर्य हुआ कि मॉडल जैसे घोषणात्मक शैली का उपयोग करते समय इसे कैसे आपूर्ति की जा सकती है।

class Person(Base): 
    __tablename__ = "person" 
    __table_args__ = {'sqlite_autoincrement': True} 

आप कई तर्क शामिल करने के लिए है, तो इस प्रपत्र का उपयोग: तर्क के साथ एक __table_args__ विशेषता आप पारंपरिक (गैर कथात्मक) डेटा परिभाषा शैली में Table कंस्ट्रक्टर्स को मिलेगा, जैसे सहित

उत्तर

17

कोशिश बजाय (dict पिछले हो गया है):

__table_args__ = (
    Unique('foo'), 
    # ... 
    {'sqlite_autoincrement': True} 
) 

घोषणात्मक SQLAlchemy दस्तावेज की Table configuration अनुभाग से:

+०१२३५१६४१०६

नाम, मेटाडाटा, और मैप किए गए Column के अलावा तालिका तर्क __table_args__ कक्षा विशेषता का उपयोग करके निर्दिष्ट किए गए हैं। यह विशेषता दोनों स्थितित्मक और साथ ही कीवर्ड तर्कों को समायोजित करती है जिन्हें आम तौर पर Table कन्स्ट्रक्टर में भेजा जाता है।

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