2010-01-10 233 views
2

我想查找由Perl ORM程序包(如Class::DBI)生成的确切SQL语句。我寻找一个简单的插入生成的SQL和删除,但是从稍微复杂的对象操作结果行修改(在表是在父表中的行的子行插入,例如)是否有可能获得由Class :: DBI生成的SQL语句?

有什么方法可以得到它吗?

+0

为什么以及您希望如何获取SQL?如果这是一次性的事情,那并不难。如果你想在程序中不断地做它,并用它做一些花哨的事情,那就更难了。 – 2010-01-10 12:24:33

+0

以下是我的想法:我必须保持两个数据库同步。其中只有一个是活动数据库。另一个只是一个活动的副本。由于两者之间的连接并不总是保证稳定,所以我想记录在一个数据库上生成的所有SQL语句,将它们收集到一个文件中,通过网络传输文件并在被动数据库的单个事务中运行所有语句。不幸的是,由于我无法控制的原因,我无法使用复制工具或两阶段提交,理想情况下这是解决此问题的正确方法。 – 2010-01-10 12:47:18

回答

6

类:: DBI使用DBI引擎盖下,这样你就可以通过环境变量使所有的SQL语句的跟踪:

use DBI; 
DBI->trace(2, 'dbi.log'); 

DBI_TRACE=3=dbi.log your-perl-script 

或Perl内,执行任何语句之前

请参阅http://metacpan.org/pod/DBI#TRACING

+0

谢谢 - 试过了。奇迹般有效 :) – 2010-01-10 15:34:35

2

既然你说“比如” ......

你可以,如果你使用的是DBIx::Class(其中有a Class::DBI compatibility layer)设置环境变量DBIC_TRACE1

+0

我认为DBI :: Profile也会同样有用,虽然我还没有尝试过,而且我对ORM的一般厌恶会阻止我尝试:) – 2010-01-10 12:26:53

相关问题