Vâng, câu hỏi khá nhiều tóm tắt nó. Hoạt động db của tôi rất cập nhật, và tôi muốn lập trình một Phân tích chân không. Tuy nhiên tôi nhận được một lỗi nói rằng truy vấn không thể được thực hiện trong một giao dịch. Có cách nào khác để làm điều đó không?Có thể phát hành "VACUUM ANALYZE <tablename>" từ psycopg2 hoặc sqlalchemy cho PostgreSQL không?
Trả lời
Đây là một lỗ hổng trong API DB-Python: nó bắt đầu một giao dịch cho bạn. Nó không nên làm điều đó; cho dù và khi nào bắt đầu một giao dịch phải được lập trình viên. API cấp thấp, lõi như thế này không nên giữ nhà phát triển và làm những việc như bắt đầu giao dịch sau lưng chúng tôi. Chúng tôi là con trai lớn - chúng tôi có thể bắt đầu giao dịch ourself, cảm ơn.
Với psycopg2, bạn có thể tắt hành vi không may này với tiện ích mở rộng API: gọi connection.autocommit()
. Không có API chuẩn nào cho điều này, thật không may, vì vậy bạn phải phụ thuộc vào các phần mở rộng không chuẩn để phát hành các lệnh phải được thực hiện bên ngoài giao dịch.
Không có ngôn ngữ nào không có mụn cóc và đây là một trong những ngôn ngữ của Python. Tôi đã bị cắn bởi điều này trước đây.
chỉ là một nhận xét rằng 'connection.autocommit' là một thuộc tính boolean, không phải là một hàm. Vì vậy, để thực hiện các truy vấn bên ngoài một giao dịch, bạn có thể đặt 'connection.autocommit = True' trước khi thực thi VACUUM –
Bạn có thể bật Postgres autocommit
chế độ sử dụng SQLAlchemy của raw_connection (mà sẽ cung cấp cho bạn một "thô" Kết nối psycopg2): [? PostgreSQL - làm thế nào để chạy chân không từ mã khối giao dịch bên ngoài]
import sqlalchemy
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
engine = sqlalchemy.create_engine(url)
connection = engine.raw_connection()
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cursor = connection.cursor()
cursor.execute("VACUUM ANALYSE table_name")
- 1. SQLAlchemy, Psycopg2 và PostgreSQL COPY
- 2. Kết nối postgresql với sqlalchemy
- 3. psycopg2 không thực hiện chức năng PostgreSQL
- 4. PostgreSQL - cách chạy VACUUM từ mã bên ngoài khối giao dịch?
- 5. Tôi có nên chạy VACUUM trong giao dịch hoặc sau đó không?
- 6. Bắt SQLAlchemy phát hành CREATE SCHEMA trên create_all
- 7. PostgresQL Tự động VACUUM ĐẦY ĐỦ cho các bảng cồng kềnh
- 8. SQLAlchemy và Postgresql: to_tsquery()
- 9. IN khoản với số nguyên trong sqlalchemy/psycopg2
- 10. Làm cách nào để đặt mức cô lập giao dịch trong SQLAlchemy cho PostgreSQL?
- 11. Các mảng đa chiều PostgreSQL trong SQLAlchemy
- 12. Tôi có thể có Hành động <> hoặc Func <> với tham số ngoài không?
- 13. Cách thể hiện một miền PostgreSQL tùy chỉnh trong SQLAlchemy?
- 14. Cài đặt psycopg2 (postgresql) trong virtualenv trên windows
- 15. Psycopg2, Postgresql, Python: Cách nhanh nhất để chèn hàng loạt
- 16. Fluent NHibernate FluentMappings.AddFromAssemblyOf <> Phát hành
- 17. mối quan hệ SQLAlchemy với PostgreSQL ARRAY
- 18. Từ chối ứng dụng đang chờ phát hành Bản phát hành dành cho nhà phát triển
- 19. Django với plugin psycopg2
- 20. Lỗi mã hóa với sqlalchemy và postgresql
- 21. Thiết bị đầu cuối có thể phát hiện <Shift-Enter> hoặc <Control-Enter> không?
- 22. PostgreSQL: có thể cung cấp tên tùy chỉnh cho PRIMARY KEY hoặc UNIQUE không?
- 23. SQLAlchemy lọc in_ hành
- 24. Kiểm tra xem bảng postgresql có tồn tại dưới python (và có lẽ Psycopg2)
- 25. ARC có phát hành bộ nhớ malloc'ed cho bạn không?
- 26. Không thể (hoặc có thể) vào Danh sách <int> .Cast <Enum>()?
- 27. Tôi có nên sử dụng SQLObject, SQLAlchemy hoặc SQLAlchemy + Elixir không?
- 28. Có phải POST một từ điển cho một hành động .NET MVC có thể không?
- 29. Maven: phát hành plugin không thấy tôi <repository> trong <distributionManagement>
- 30. điều hành quá tải << cho mảng
thể trùng lặp của (http://stackoverflow.com/questions/1017463/postgresql-how-to-run-vacuum-from-code-outside-transaction-block) –
Cảm ơn, nó là một bản sao. Làm thế nào tôi có thể đánh dấu nó là một? – donatello