Tôi đang chèn nhiều bản ghi 10k vào cơ sở dữ liệu với quy tắc toàn vẹn REF. Một số hàng dữ liệu không may bị trùng lặp (ở chỗ chúng đã tồn tại trong cơ sở dữ liệu). Nó sẽ là quá đắt để kiểm tra sự tồn tại của mỗi hàng trong cơ sở dữ liệu trước khi chèn nó vì vậy tôi có ý định tiến hành bằng cách xử lý các trường hợp ngoại lệ IntegrityError được tạo bởi SQLAlchemy, ghi lại lỗi và sau đó tiếp tục.SQLAlchemy IntegrityError và nhập dữ liệu hàng loạt
Mã của tôi sẽ giống như thế này:
# establish connection to db etc.
tbl = obtain_binding_to_sqlalchemy_orm()
datarows = load_rows_to_import()
try:
conn.execute(tbl.insert(), datarows)
except IntegrityError as ie:
# eat error and keep going
except Exception as e:
# do something else
The (implicit) giả định tôi đang làm trên là SQLAlchemy không lăn nhiều chèn vào ONE giao dịch. Nếu giả định của tôi là sai thì nó có nghĩa là nếu một IntegrityError xảy ra, phần còn lại của chèn bị hủy bỏ. Bất cứ ai có thể xác nhận nếu giả "mô hình" ở trên sẽ làm việc như mong đợi - hoặc tôi sẽ kết thúc mất dữ liệu như là kết quả của ném ngoại lệ IntegrityError?
Ngoài ra, nếu có ai có ý tưởng tốt hơn về việc này, tôi sẽ muốn nghe điều đó.