Tôi hiện có một cột có chứa đánh dấu HTML. Bên trong đánh dấu đó, có một dấu thời gian mà tôi muốn lưu trữ trong một cột mới (vì vậy tôi có thể truy vấn nó). Ý tưởng của tôi là phải làm như sau trong một sự chuyển đổi duy nhất:Sử dụng SQLAlchemy ORM bên trong một di cư Alembic: làm thế nào để tôi?
- Tạo mới, cột nullable cho dữ liệu
- Sử dụng ORM để kéo lại HTML tôi cần phải phân tích
- Đối với mỗi hàng
- phân tích cú pháp HTML để kéo ra dấu thời gian
- cập nhật các đối tượng ORM
Nhưng khi tôi cố gắng chạy di chuyển của tôi, nó dường như bị mắc kẹt trong một vòng lặp vô hạn. Đây là những gì tôi đã có cho đến nay:
def _extract_publication_date(html):
root = html5lib.parse(html, treebuilder='lxml', namespaceHTMLElements=False)
publication_date_string = root.xpath("//a/@data-datetime")[0]
return parse_date(publication_date)
def _update_tip(tip):
tip.publication_date = _extract_publication_date(tip.rendered_html)
tip.save()
def upgrade():
op.add_column('tip', sa.Column('publication_date', sa.DateTime(timezone=True)))
tips = Tip.query.all()
map(tips, _update_tip)
def downgrade():
op.drop_column('tip', 'publication_date')
Làm thế nào để bạn biết nó bị kẹt trong một vòng lặp vô hạn? –
Nếu 'Tip.query' không sử dụng cùng một phiên làm' op', thì sẽ có 2 giao dịch, với lệnh 'SELECT' đang chờ đợi lệnh' ALTER TABLE' thực hiện. Dù sao, tôi nghĩ rằng nó là sạch hơn để di chuyển phần ORM để kịch bản riêng của mình, để được chạy bằng tay sau khi 'nâng cấp alembic'. – sayap
@ X-Istence Tôi không biết nó bị mắc kẹt trong một vòng lặp vô hạn. I ** DO ** biết rằng lệnh không bao giờ trả về. –