मेरे पास वर्तमान में एक कॉलम है जिसमें HTML मार्कअप है। उस मार्कअप के अंदर, एक टाइमस्टैम्प है जिसे मैं एक नए कॉलम में स्टोर करना चाहता हूं (इसलिए मैं इसके खिलाफ पूछताछ कर सकता हूं)। मेरा विचार एक एकल प्रवास में निम्न करने के लिए किया गया था:एक अलेम्बिक प्रवासन के अंदर SQLAlchemy ORM का उपयोग करना: मैं कैसे करूँ?
- डेटा
- उपयोग ORM एचटीएमएल मैं
- पार्स करने के लिए प्रत्येक पंक्ति के लिए की जरूरत है वापस खींचने के लिए के लिए एक नया, व्यर्थ स्तम्भ बनाएं
- एचटीएमएल पार्स टाइमस्टैम्प
- अद्यतन ORM वस्तु बाहर निकलने के लिए
लेकिन जब मैं अपना माइग्रेशन चलाने की कोशिश करता हूं, तो यह एक अनंत लूप में फंस जाता प्रतीत होता है।
import sqlalchemy as sa
tip = sa.sql.table(
'tip',
sa.sql.column('id', sa.Integer),
sa.sql.column('publication_date', sa.DateTime(timezone=True)),
)
def upgrade():
mappings = [
(x.id, _extract_publication_date(x.rendered_html))
for x in Tip.query
]
op.add_column('tip', sa.Column('publication_date', sa.DateTime(timezone=True)))
exp = sa.sql.case(value=tip.c.id, whens=(
(op.inline_literal(id), op.inline_literal(publication_date))
for id, publication_date in mappings.iteritems()
))
op.execute(tip.update().values({'publication_date': exp}))
def downgrade():
op.drop_column('tip', 'publication_date')
आप कैसे जानते हैं कि यह एक अनंत लूप में फंस गया है? –
यदि 'Tip.query' उसी सत्र का उपयोग 'ओपी' के रूप में नहीं कर रहा है, तो 'चयन' के साथ 'वैकल्पिक' एक के लिए प्रतीक्षा करने के लिए एक 'अटक' के साथ 2 लेनदेन होंगे। वैसे भी, मुझे लगता है कि 'एलेम्बिक अपग्रेड' के बाद मैन्युअल रूप से चलाने के लिए ओआरएम भाग को अपनी स्क्रिप्ट पर ले जाना क्लीनर है। – sayap
@ एक्स-इस्टेंस मुझे नहीं पता कि यह एक अनंत लूप में फंस गया है। मैं ** डीओ ** जानता हूं कि आदेश कभी वापस नहीं आता है। –