我想查找由Perl ORM程序包(如Class::DBI)生成的確切SQL語句。我不尋找一個簡單的插入生成的SQL和刪除,但是從稍微複雜的對象操作結果行修改(在表是在父表中的行的子行插入,例如)是否有可能獲得由Class :: DBI生成的SQL語句?
有什麼方法可以得到它嗎?
我想查找由Perl ORM程序包(如Class::DBI)生成的確切SQL語句。我不尋找一個簡單的插入生成的SQL和刪除,但是從稍微複雜的對象操作結果行修改(在表是在父表中的行的子行插入,例如)是否有可能獲得由Class :: DBI生成的SQL語句?
有什麼方法可以得到它嗎?
類:: DBI使用DBI引擎蓋下,這樣你就可以通過環境變量使所有的SQL語句的跟蹤:
use DBI;
DBI->trace(2, 'dbi.log');
:
DBI_TRACE=3=dbi.log your-perl-script
或Perl內,執行任何語句之前
謝謝 - 試過了。奇蹟般有效 :) – 2010-01-10 15:34:35
既然你說「比如」 ......
你可以,如果你使用的是DBIx::Class(其中有a Class::DBI compatibility layer)設置環境變量DBIC_TRACE
到1
。
我認爲DBI :: Profile也會同樣有用,雖然我還沒有嘗試過,而且我對ORM的一般厭惡會阻止我嘗試:) – 2010-01-10 12:26:53
爲什麼以及您希望如何獲取SQL?如果這是一次性的事情,那並不難。如果你想在程序中不斷地做它,並用它做一些花哨的事情,那就更難了。 – 2010-01-10 12:24:33
以下是我的想法:我必須保持兩個數據庫同步。其中只有一個是活動數據庫。另一個只是一個活動的副本。由於兩者之間的連接並不總是保證穩定,所以我想記錄在一個數據庫上生成的所有SQL語句,將它們收集到一個文件中,通過網絡傳輸文件並在被動數據庫的單個事務中運行所有語句。不幸的是,由於我無法控制的原因,我無法使用複製工具或兩階段提交,理想情況下這是解決此問題的正確方法。 – 2010-01-10 12:47:18