ऐसा लगता है कि sqlalchemy.migrate के पास पोस्टग्रेस्क्ल के लिए स्ट्रिंग से इंटीजर कॉलम प्रकारों में परिवर्तन के मामले में मान्य क्वेरी प्रस्तुत करने के लिए समर्थन नहीं है।
आपके मामले में मैं इसे सीधे क्वेरी निष्पादन के रूप में लागू करूंगा और आगे बढ़ूंगा।
def downgrade(migrate_engine):
# ALTER TABLE courses ALTER COLUMN number SET DATA TYPE integer;
migrate_engine.execute('ALTER TABLE courses ALTER COLUMN number TYPE INTEGER USING number::numeric')
स्ट्रिंग से इंटीजर में माइग्रेट करने वाला बीटीडब्ल्यू विभिन्न कारणों से विफल हो सकता है - जब कॉलम मान में कुछ मान होगा जिसे संख्या में परिवर्तित नहीं किया जा सकता है। इसलिए मैं बाद में डाउनग्रेड माइग्रेशन को संभव बनाए रखने के लिए एप्लिकेशन लॉजिक में कुछ अतिरिक्त सत्यापन जोड़ूंगा।