【问题标题】:How to avoid inserting a field that is not null from csv to mysql using Perl?如何避免使用 Perl 从 csv 向 mysql 插入不为空的字段?
【发布时间】:2013-11-08 01:59:00
【问题描述】:

我正在使用 Perl 将 csv 文件插入 MySQL。 我已经成功地将一些数据插入到 MySQL 中。 但是csv文件中有些字段为空,代码无法继续运行。

if 语句检查$rttjitter 是否不为空,否则打印该行号,然后执行的正确方法是什么?

即2 个条件:$rtt 不等于 0,$rttjitter 不为空。

my $empty =  q{};

my @nulls = ();

if ($rtt !=0 && $rttjitter ne undef)

^ 这些都不能很好地工作。

【问题讨论】:

    标签: mysql perl csv notnull


    【解决方案1】:

    您可以使用内置的defined 函数来显式检查是否定义了变量,例如

    if( defined( $rttjitter ) and $rttjitter ) { ...
    

    将检查它是否已定义并且具有非 0 或空字符串的值。

    您似乎应该再看看您在 CSV 中的阅读方式(您正在使用像 Text::CSV 这样的模块,对吗?),和/或您现在的情况进行数据库插入,通常与这种事情一样,undef 值将作为 NULL 干净地插​​入到数据库中,并且不应该对您的代码造成任何问题,除非您正在做一些奇怪的事情。

    【讨论】:

    • 它说“全局符号“$DBNAME”需要明确的包名,当我使用“use Text::CSV”时出现编译错误。
    • 我现在可以使用 if( defined( $rttjitter ) && $rttjitter && $rtt != 0) 插入
    【解决方案2】:
    if (defined($rttjitter) && defined($rtt) && $rtt != 0)
    {
        ... # $rttjitter is not null (undef) and $rtt is not null (undef) and nonzero
    }
    else
    {
        ... # at least one column fails the test
    }
    

    【讨论】:

    • DBD::mysql::st execute failed: Data truncated for column 'rttjitter' at row1.......一旦找到空字段,它就会停止插入...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2019-03-27
    相关资源
    最近更新 更多