PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thực thi nhiều câu lệnh với Postgresql thông qua SQLAlchemy không tiếp tục thay đổi

Cách hoạt động của tính năng autocommit của SQLAlchemy là nó kiểm tra các câu lệnh đã phát hành, cố gắng phát hiện xem dữ liệu có bị sửa đổi hay không:

..., SQLAlchemy triển khai tính năng "autocommit" của riêng mình, tính năng này hoạt động hoàn toàn nhất quán trên tất cả các phần mềm phụ trợ. Điều này đạt được bằng cách phát hiện các câu lệnh đại diện cho các hoạt động thay đổi dữ liệu, tức là CHÈN, CẬP NHẬT, XÓA, cũng như các câu lệnh ngôn ngữ định nghĩa dữ liệu (DDL) như TẠO BẢNG, BẢNG BÁO, sau đó đưa ra một CAM KẾT tự động nếu không có giao dịch nào đang diễn ra . Việc phát hiện dựa trên sự hiện diện của autocommit=True tùy chọn thực thi trên câu lệnh. Nếu câu lệnh là câu lệnh chỉ văn bản và cờ không được đặt, một biểu thức chính quy được sử dụng để phát hiện INSERT, UPDATE, DELETE, cũng như nhiều lệnh khác cho một chương trình phụ trợ cụ thể

Vì nhiều bộ kết quả không được hỗ trợ ở cấp SQLAlchemy, trong ví dụ đầu tiên của bạn, việc phát hiện chỉ đơn giản là bỏ qua việc phát hành COMMIT vì đầu tiên là một câu lệnh CHỌN, trong đó như trong ví dụ thứ hai của bạn, nó là một CẬP NHẬT. Không có nỗ lực nào để phát hiện ra các câu lệnh sửa đổi dữ liệu từ nhiều câu lệnh.

Nếu bạn nhìn vào PGExecutionContext.should_autocommit_text() , bạn sẽ thấy rằng nó đối sánh regex với AUTOCOMMIT_REGEXP . Nói cách khác, nó chỉ khớp ở đầu văn bản.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @JoinColumn là gì và nó được sử dụng như thế nào trong Hibernate

  2. Rails Migrations:đã cố gắng thay đổi loại cột từ chuỗi thành số nguyên

  3. Làm cách nào để ghi dữ liệu từ R vào các bảng PostgreSQL với khóa chính tự động tăng thêm?

  4. in giá trị của một biến trong postgresql

  5. Các công cụ sao lưu hàng đầu cho PostgreSQL