không ai biết tương đương với mệnh đề SQL "INSERT HOẶC REPLACE" trong SQLAlchemy và ngôn ngữ biểu thức SQL của nó là gì?SQLAlchemy - INSERT OR REPLACE tương đương
Rất cám ơn - honzas
không ai biết tương đương với mệnh đề SQL "INSERT HOẶC REPLACE" trong SQLAlchemy và ngôn ngữ biểu thức SQL của nó là gì?SQLAlchemy - INSERT OR REPLACE tương đương
Rất cám ơn - honzas
Tôi không nghĩ (đúng cho tôi nếu tôi sai) INSERT OR REPLACE là trong bất kỳ các tiêu chuẩn SQL; đó là một điều cụ thể về SQLite. Có MERGE, nhưng điều đó cũng không được hỗ trợ bởi tất cả các phương ngữ. Vì vậy, nó không có sẵn trong phương ngữ chung của SQLAlchemy.
Giải pháp sạch nhất là sử dụng Phiên, theo đề xuất của M. Utku. Bạn cũng có thể sử dụng SAVEPOINTs để lưu, hãy thử: một chèn, ngoại trừ IntegrityError: sau đó rollback và làm một bản cập nhật để thay thế. Một giải pháp thứ ba là viết INSERT của bạn với một mệnh đề OUTER JOIN và WHERE để lọc các hàng có các giá trị rỗng.
Session.save_or_update(model)
Còn khoảng Session.merge
thì sao?
Session.merge(instance, load=True, **kw)
Sao chép trạng thái của trường hợp sang thể hiện liên tục bằng cùng số nhận dạng.
Nếu không có trường hợp liên tục hiện được liên kết với phiên, nó sẽ được tải. Trả về cá thể kiên trì. Nếu cá thể đã cho chưa được lưu, hãy lưu một bản sao và trả về nó như là một cá thể mới tồn tại. Ví dụ đã cho không được kết hợp với phiên. Thao tác này xếp vào các trường hợp liên quan nếu liên kết được ánh xạ với cascade = "merge".
từ http://www.sqlalchemy.org/docs/reference/orm/sessions.html
Bạn có thể sử dụng OR REPLACE
như một cái gọi là prefix
trong SQLAlchemy bạn Insert
- tài liệu về cách đặt OR REPLACE
giữa INSERT
và INTO
trong câu lệnh SQL của bạn là here
Điều này tương tự như [câu trả lời này] (http://stackoverflow.com/questions/2218304/sqlalchemy-insert-ignore/2224729#2224729). –
Đây không phải là của tôi trường hợp. Tôi không sử dụng phiên, tôi đang sử dụng kết nối trực tiếp, vì vậy nó phải được thực hiện bằng cách sử dụng ngôn ngữ biểu thức SQL và conn.execute (...) – honzas
Dù sao, đây là 0,4 SQLA cụ thể, cho 0,5 bạn phải sử dụng Session.add (mô hình) – Jiri