Tôi đang ấn tượng rằng các cuộc gọi cơ sở dữ liệu thông qua SQLAlchemy sẽ chặn và không phù hợp để sử dụng trong bất kỳ thứ gì khác ngoài mã đồng bộ. Tôi có đúng không (tôi hy vọng là không!) Hoặc có cách nào để cấu hình nó không bị chặn không?SQLAlchemy có thể được định cấu hình để không bị chặn không?
Trả lời
Bạn có thể sử dụng SQLA theo kiểu không chặn bằng cách sử dụng gevent. Dưới đây là một ví dụ sử dụng psycopg2, sử dụng psycopg2 của coroutine support: folks
https://bitbucket.org/zzzeek/green_sqla/
Tôi cũng nghe nói sử dụng ý tưởng cùng với pymysql. Vì pymysql là trong Python thuần túy và sử dụng thư viện ổ cắm, gevent vá các thư viện socket là không đồng bộ.
Tuyệt vời! Cảm ơn bạn. Có bất kỳ cảnh báo nào mà tôi cần biết (không xuất hiện trong tài liệu) khi sử dụng nó theo cách này không? – Matty
không chắc chắn. tôi tìm thấy nó dường như làm việc tốt hơn bằng cách sử dụng NullPool, mà vô hiệu hóa tổng hợp. Nếu không một cái gì đó đã làm cho nó treo. Vì vậy, có thể tiến hành thận trọng để bắt đầu với .. – zzzeek
@zzzeek Treo máy của bạn có thể đến từ hồ bơi mặc định của SQLAlchemy (QueuePool) bằng cách sử dụng luồng không được vá khỉ. Áp dụng bản vá khỉ của gevent hoặc tạo phiên bản màu xanh lục của QueuePool theo ví dụ tại https://groups.google.com/forum/#!msg/gevent/533wzrnL0Fs/ijL34u5prYIJ. Điều đó cố định cùng một hành vi khi tôi có nó. – CryingCyclops
Hãy xem Tornado vì chúng có một số thư viện không chặn gọn gàng, đặc biệt là tornado.gen.
Chúng tôi sử dụng cùng với Momoko, một trình bao bọc psycopg không chặn của Tornado. Nó đã được tuyệt vời cho đến nay. Có lẽ nhược điểm duy nhất là bạn mất tất cả các đối tượng mô hình mà SQLAlchemy cung cấp cho bạn. Hiệu suất là không thực tế mặc dù.
Tôi đã nhìn Tornado và tôi cũng có thể đi xuống con đường đó. Có lẽ tôi nên viết một số mã demo để kiểm tra điều này, nhưng nếu trình điều khiển psycopg hỗ trợ các cuộc gọi cơ sở dữ liệu không đồng bộ (có vẻ như nó), tôi cho rằng có thể thực hiện các cuộc gọi DB không chặn với SQLAlchemy. – Matty
@Matty Ý tưởng hay, tôi rất muốn nghe bạn đi với nó như thế nào. Một trong những vấn đề chính tôi tưởng tượng bạn sẽ nhấn với SQLAlchemy là không biết chính xác khi nào một cuộc gọi chặn sẽ được thực hiện. Tất nhiên bạn luôn có thể đi sâu vào mã để tìm ra khi nào ruột của tôi nói rằng đó sẽ là rất nhiều công việc. – kuhnza
@Kahunza Sau khi xem nhanh các tài liệu cho psycopg2, có vẻ như có một đối số có thể được đưa vào chuỗi kết nối được chuyển tới hàm 'create_engine()' của SQLAlchemy. Có lẽ một trong những người bảo trì sẽ kêu vang hoặc tôi sẽ yêu cầu danh sách của họ. Chúc mừng! – Matty
Nếu không có sự trợ giúp của greenlet, câu trả lời là không, trong ngữ cảnh của asyncio.
Tuy nhiên, chỉ có thể sử dụng một phần của SQLAlchemy trong asyncio. Hãy tìm ví dụ trong GINO project, trong đó chúng tôi chỉ sử dụng lõi SQLAlchemy không có động cơ và ngữ cảnh thực thi đầy đủ để tạo một ORM đơn giản trong asyncio.
- 1. Định cấu hình Django để sử dụng SQLAlchemy
- 2. SQLAlchemy bị chặn khi thả bảng
- 3. Đa hình đa cấp có thể có trong SQLAlchemy không?
- 4. Heroku có thể được định cấu hình để triển khai liền mạch không?
- 5. Không thể định cấu hình gcc - mpfr không tìm thấy
- 6. Xác định xem ứng dụng có bị chặn/bận không?
- 7. Có thể định cấu hình không cập nhật được sau khi gọi ajax thành công
- 8. Eclipse có thể được cấu hình để ngăn chặn các cảnh báo nhất định không hiển thị trong ngăn xem Sự cố không?
- 9. Đánh dấu thoát trong jQuery có định hướng JSON có thể định cấu hình không?
- 10. Có thể SQLAlchemy háo hức/tham gia tải được ngăn chặn một lần thiết lập?
- 11. Tôi có thể định cấu hình Grails không có nguồn dữ liệu không?
- 12. Git có thể được định cấu hình để tắt tính năng hợp nhất cho các loại tệp cụ thể không?
- 13. Không thể định cấu hình nhật ký ghi lại
- 14. "Tệp cấu hình hiện tại (./config.inc.php) không thể đọc được."?
- 15. Không thể cấu hình pyQT
- 16. Không thể định cấu hình Android Với Ubuntu 11.10
- 17. Có thể tạo hiển thị log4j mà tệp được sử dụng để định cấu hình chính nó không?
- 18. IntelliJ 11 - Grails SDK không được định cấu hình
- 19. Có thể định cấu hình tìm kiếm Plone để xem nội dung portlet không?
- 20. Tệp cấu hình không được định dạng đúng XML # 2
- 21. Có thể định cấu hình Kẹp giấy để tạo url HTTPS không?
- 22. Có điểm chặn như chuẩn bị cho TabBarController không?
- 23. Persistence.xml không được định cấu hình chính xác
- 24. Tôi có thể định cấu hình pydev để tự động biên dịch các tệp cython không?
- 25. Không thể sử dụng lớp Meta của mô hình Django kế thừa để định cấu hình trường được xác định trong mô hình trừu tượng được thừa kế
- 26. "Không thể tải danh tính chứng chỉ X.509 được chỉ định trong cấu hình"
- 27. Có bộ sưu tập không bị chặn trong Java không?
- 28. Có thể ClickOnce được định cấu hình để xóa các thư mục đã xuất bản cũ không?
- 29. Cấu hình WCF không có tệp cấu hình
- 30. Có thể Apache BalancerMember được cấu hình để sử dụng ổ cắm miền unix không?
Câu trả lời ngắn gọn, không. Đó là các thư viện cơ sở dữ liệu đang chặn, chứ không phải chính SQLalchemy. Tuy nhiên, không có gì ngăn bạn làm công cụ DB trong một chuỗi riêng biệt. – AdamKG
@AdamKG Điều này có lẽ phải là câu trả lời chứ không phải là nhận xét! :-) – Matty