我正在运行perl脚本来使用新数据集更新当前正在运行的数据库。基本上,脚本接收分子信息为纯文本(MDL,如果您感兴趣),并通过一系列通过系统调用的第三方软件执行几个化学属性计算。
脚本从未在处理数据方面遇到任何问题,但最后一个数据集似乎有一些分子(或者至少有一个分子,因为它的价值),其中一些属性没有意义,我最终拥有截断的数据插入,最后导致DBIC异常。即:
DBIx::Class::Storage::DBI::_dbh_execute(): DBI Exception: DBD::mysql::st execute failed: Column 'inchi' cannot be null [for Statement "INSERT INTO moldata ( formula, hba, hbd, inchi, inchikey, mol_id, pm, psa, ro3pass, ro5vio, rtb, smiles, xlogp3aa) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" with ParamValues: 0='I', 1='0', 2='0', 3=undef, 4='XMBWDFGMSWQBCA-YPZZEJLDSA-M', 5=936934, 6='125.00', 7='0', 8=6, 9=0, 10='0', 11='[125I-]', 12='0.86']
此时,该程序刚刚死亡。我肯定可以做一些变通办法,以避免得到" undefs"在插入中,但是我希望DBIC能够处理它们并继续插入而忽略(并且可能会警告我以后)坏的插件。
在perl中为DBIC事务实现try / catch场景的正确方法是什么?
谢谢!