【问题标题】:Is it possible to obtain the SQL statements generated by Class::DBI?是否可以获取 Class::DBI 生成的 SQL 语句?
【发布时间】:2010-01-10 11:59:59
【问题描述】:

我想找到由 Perl ORM 包(例如 Class::DBI)生成的确切 SQL 语句。我不是寻找为简单的插入和删除而生成的 SQL,而是寻找由稍微复杂的对象操作导致的行修改(在作为父表中一行的子表的表中插入行,例如例子)

有什么方法可以得到吗?

【问题讨论】:

  • 您为什么以及如何获得 SQL?如果这是一次性的事情,那并不难。如果你想在程序中不断地做它并用它做一些花哨的事情,那就有点难了。
  • 这是我的想法:我必须让两个数据库保持同步。其中只有一个是活动数据库。另一个只是持有活动副本的副本。由于不能保证两者之间的连接总是稳定的,我想记录在一个数据库上生成的所有 SQL 语句,将它们收集到一个文件中,通过网络传输文件并在被动数据库上的单个事务中运行所有语句.不幸的是,由于我无法控制的原因,我无法使用复制工具或两阶段提交,这在理想情况下是解决此问题的正确方法。

标签: perl orm class-dbi


【解决方案1】:

Class::DBI 在后台使用 DBI,因此您可以通过环境变量启用对所有 SQL 语句的跟踪:

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

或者在 Perl 内部,在执行任何语句之前:

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

http://metacpan.org/pod/DBI#TRACING

【讨论】:

  • 谢谢 - 试过了。像魅力一样工作:)
【解决方案2】:

既然你说“比如”……

如果您使用的是DBIx::Class(有a Class::DBI compatibility layer),则可以将环境变量DBIC_TRACE 设置为1

【讨论】:

  • 我认为 DBI::Profile 会同样有用,虽然我还没有尝试过,而且我对 ORM 的普遍厌恶使我不敢尝试 :)
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
相关资源
最近更新 更多