Tôi mới sử dụng SQLAlchemy và đã kế thừa một codebase hơi lộn xộn mà không cần truy cập vào tác giả gốc.Khi nào tôi nên gọi flush() trên SQLAlchemy?
Mã được bật lên với các cuộc gọi đến DBSession.flush()
, dường như bất kỳ lúc nào tác giả muốn đảm bảo dữ liệu đã được lưu. Lúc đầu, tôi chỉ theo dõi các mẫu mà tôi đã thấy trong mã này, nhưng khi tôi đang đọc tài liệu, có vẻ như điều này là không cần thiết - việc tự động điền phải được thực hiện. Ngoài ra, tôi đã nhận được vào một vài trường hợp với các cuộc gọi AJAX tạo ra lỗi "InvalidRequestError: Session đã được flushing".
Trong những trường hợp nào tôi muốn giữ lời gọi tuôn ra()?
Đây là một ứng dụng Kim tự tháp, và SQLAlchemy đang được thiết lập với:
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension(), expire_on_commit=False))
Base = declarative_base()
Cảm ơn rất nhiều. Theo dõi: Điều gì cấu thành một lý do thực sự tốt để có expire_on_commit = Sai trong thiết lập này? (Tôi không biết tại sao nó được thiết lập theo cách này ở nơi đầu tiên). – blocks
Theo kinh nghiệm của tôi, nó được sử dụng bởi những người không biết họ đang làm gì và cố gắng lừa gạt hệ thống bằng cách sử dụng các đối tượng sau khi họ đã được cam kết. * rõ ràng * sau khi cam kết, bạn không có đảm bảo rằng trạng thái của đối tượng đó là hợp lệ nữa. –
@Michael Merickel - Rất được giải thích. Làm thế nào về khi chúng ta không nên sử dụng tuôn ra()? [Có bất kỳ phản ứng phụ nào khi gọi SQLAlchemy flush() trong mã không?] (Http://stackoverflow.com/questions/29338419/are-there-any-side-effects-from-calling-sqlalchemy-flush-within-code) –