मैं डेटाबेस परिवर्तनों का ट्रैक रखने के लिए स्क्लेक्लेमी माइग्रेट का उपयोग कर रहा हूं और मैं एक विदेशी कुंजी को हटाने के साथ किसी समस्या में भाग रहा हूं। मेरे पास दो टेबल हैं, t_new एक नई तालिका है, और t_exists एक मौजूदा तालिका है। मुझे t_new जोड़ने की जरूरत है, फिर t_exists को एक विदेशी कुंजी जोड़ें। तो मुझे ऑपरेशन को उलट करने में सक्षम होना चाहिए (जहां मुझे परेशानी हो रही है)।मैं स्क्लाक्लेमी में एक विदेशी कुंजी बाधा को कैसे हटा सकता हूं?
t_new = sa.Table("new", meta.metadata,
sa.Column("new_id", sa.types.Integer, primary_key=True)
)
t_exists = sa.Table("exists", meta.metadata,
sa.Column("exists_id", sa.types.Integer, primary_key=True),
sa.Column(
"new_id",
sa.types.Integer,
sa.ForeignKey("new.new_id", onupdate="CASCADE", ondelete="CASCADE"),
nullable=False
)
)
यह ठीक काम करता है:
t_new.create()
t_exists.c.new_id.create()
लेकिन यह नहीं है: 1025, के नाम बदलने पर "त्रुटि ':
t_exists.c.new_id.drop()
t_new.drop()
विदेशी कुंजी स्तंभ ड्रॉप करने की कोशिश कर रहा एक त्रुटि देता है। \ my_db_name \ # sql-1b0_2e6 'to'। \ my_db_name \ exist '(errno: 150) "
यदि मैं कच्चे SQL के साथ ऐसा करता हूं, तो मैं f को हटा सकता हूं ओरेगिन कुंजी मैन्युअल रूप से कॉलम को हटा दें, लेकिन मैं यह समझने में सक्षम नहीं हूं कि SQLAlchemy के साथ विदेशी कुंजी को कैसे निकाला जाए? मैं विदेशी कुंजी, और फिर कॉलम को कैसे हटा सकता हूं?
जो भी इसमें भाग ले सकता है - विदेशी के लिए कॉन्स्ट्रेन को 'माइग्रेट' से 'sqlalchemy' से आयात नहीं किया जाना चाहिए। – mjallday