मैं एक कॉलम नाम बदलने की कोशिश कर रहा हूं। पहला प्रयास इस स्क्रिप्ट के साथ किया गया था:sqlalchemy-migrate के साथ कॉलम नाम माइग्रेशन को कैसे बदलें?
meta = MetaData()
users = Table('users', meta,
Column('id', Integer, primary_key=True),
Column('name', String(50), unique=True),
Column('email', String(120), unique=True)
)
def upgrade(migrate_engine):
meta.bind = migrate_engine
users.c.id.alter(name='id')
def downgrade(migrate_engine):
meta.bind = migrate_engine
users.c.id.alter(name='user_id')
मेरी देव डेटाबेस (SQLite) काम करता है पर migrate.py test
चल रहा है और इतने उन्नयन और पदावनति करता है। लेकिन जब इसे हेरोकू पर मेरे परीक्षण वातावरण में तैनात किया जाता है (जहां PostgreSQL 8.3 का उपयोग किया जाता है) जब मैं अपग्रेड करने का प्रयास करता हूं तो मुझे एक ट्रेस मिलता है।
sqlalchemy.exc.ProgrammingError: (ProgrammingError) column "id" does not exist
मैं तो अपग्रेड विधि में users.c.user_id
का उपयोग करने की कोशिश की: सार यह संदेश है।
meta_old = MetaData()
meta_new = MetaData()
users_old = Table('users', meta_old,
Column('user_id', Integer, primary_key=True),
Column('name', String(50), unique=True),
Column('email', String(120), unique=True)
)
users_new = Table('users', meta_new,
Column('id', Integer, primary_key=True),
Column('name', String(50), unique=True),
Column('email', String(120), unique=True)
)
def upgrade(migrate_engine):
meta_old.bind = migrate_engine
users_old.c.user_id.alter(name='id')
def downgrade(migrate_engine):
meta_new.bind = migrate_engine
users_new.c.id.alter(name='user_id')
यह पहले से ही SQLAlchemy-विस्थापित लिपियों के लिए मॉडल कॉपी-पेस्ट करने के लिए अभ्यास की सिफारिश की है: यह दोनों परिवेशों .:
AttributeError: user_id
वैकल्पिक हल अब मैं उपयोग कर रहा हूँ में विफल रहता है इस स्क्रिप्ट है। लेकिन यह अतिरिक्त डुप्लिकेशंस मेरे लिए थोड़ा अधिक हो जाता है। कोई भी जानता है कि यह कैसे किया जाना चाहिए। मान लीजिए कि यह एक बग है, मैं कुछ कामकाज को कम करने के सुझावों पर सुझाव देना चाहता हूं।
अच्छा, हालांकि मैं स्कीमा माइग्रेशन में autoload = True का उपयोग करने से सावधान हूं। बस भविष्य में एक सिर-अप, डाउनग्रेड में अपने परिवर्तनों को विपरीत में लागू करना याद रखें! यदि आप नहीं करते हैं, तो आप (शायद) बहुत सारी त्रुटियां प्राप्त करेंगे! –