Tôi muốn tách một phiên bản của một lớp khỏi phiên của tôi nhưng nó vẫn có sẵn để đọc (không phát ra truy vấn). Tôi đã được quét qua các tài liệu trong nhiều ngày nay, nhưng mỗi cách tiếp cận tôi cố gắng dẫn đến thông điệpTách SQLAlchemy dụ để không làm mới xảy ra
DetachedInstanceError: Instance <MyModel at 0x36bb190> is not bound to a Session;
attribute refresh operation cannot proceed
tôi đang làm việc với người quản lý zope.sqlalchemy
giao dịch trong kim tự tháp. Tôi muốn đối tượng của mình có thể sử dụng được sau giao dịch đã được thực hiện. Tôi chỉ cần nó để đọc giá trị "được lưu trong bộ nhớ cache", tức là những giá trị đã ở trong đó trước khi giao dịch được thực hiện.
Cách duy nhất tôi có thể tìm ra là bằng cách gói lớp (hoặc chính các thuộc tính) và sau đó theo dõi các thay đổi theo cách thủ công (tôi có thể làm điều đó nhưng nó thực sự xấu và không phải ở tất cả pythonic).
Vì vậy, có cách nào tôi có thể ngăn SQLAlchemy cố gắng làm mới các giá trị này không?
Là một fallback Tôi thậm chí sẽ sẵn sàng chỉ trở None
, miễn là các lỗi trên không được ném sau khi giao dịch như đã cam kết
Loại thuộc tính nào bạn đang cố gắng đọc? – benselme
Đó là một 'PickleType' được tạo ra bởi hàm' MutableDict.as_mutable() 'của riêng tôi.Nhưng có vẻ như một khi cam kết xảy ra, tất cả dữ liệu sẽ bị xóa khỏi các trạng thái, do đó bạn sẽ phải truy vấn, bất kỳ dữ liệu nào bạn muốn (có thể sai ở đây mặc dù ...) – javex