2010-02-24 63 views
4

我正在開發一個Python web應用程序,使用sqlalchemy與mysql數據庫進行通信。到目前爲止,我主要使用sqlalchemy的ORM層來與數據庫交談。對我來說,ORM最大的好處是開發速度快,而不必編寫所有這些sql查詢,然後將它們映射到模型。保存與存儲過程的ORM

然而,最近,我被要求改變我的設計,通過存儲過程與數據庫進行通信。是否有人知道是否有任何方法通過存儲過程使用sqlalchemy ORM層來處理我的模型?是否有另一個Python庫允許我這樣做?

我看到它的方式我應該可以編寫自己的選擇,插入,更新和刪除語句,將它們附加到模型中,讓庫完成剩下的工作。我已經多次閱讀sqlalchemy的文檔,但似乎無法找到一種方法來做到這一點。

任何幫助,這將是偉大的!

回答

2

SQLAlchemy沒有任何好的方法來將插入,更新和刪除轉換爲存儲過程調用。在mapper上添加extension_ {更新,插入,刪除}擴展的功能可能不會很難,但沒有人打擾過。我認爲要求簡單的DML語句通過存儲過程非常愚蠢。它確實沒有提供任何你無法用觸發器做的事情。

如果你無法避免愚蠢,你可以通過一些方法使用SQLAlchemy來處理它。儘管如此,你會失去一些ORM功能。您可以使用query(Obj).from_statement(text(「...」))從存儲過程結果中構建ORM對象,只需使語句中的列標籤與您告訴SQLAlchemy映射的列名匹配即可。

處理DML語句的一個選擇是關閉自動刷新,而不是刷新會話.new,.dirty和.deleted屬性以查看已更改的內容,發出相應的語句作爲存儲過程調用並清除對象在提交之前。

或者你可以放棄SQLAlchemy狀態跟蹤並直接發出存儲過程調用。