【问题标题】:save each row of a database as a seperate text file in a directory using perl?使用perl 将数据库的每一行保存为目录中的单独文本文件?
【发布时间】:2014-01-23 22:37:40
【问题描述】:

我有一个数据库表,其中包含各种列和行数据。

  1. 我想在其中一列中搜索关键字。该列称为“产品”。
  2. 我想针对每个关键字在表上运行查询,并返回包含该关键字的所有行的结果。
  3. 每行的结果应该打印到一个单独的文件中,每个文件都应该将名称作为包含该行列之一的数据值(在本例中为 item_id)

我希望在循环中完成此操作,直到在所有“产品”列中搜索表的所有行。

我有以下代码可以打印到屏幕上,但是所有匹配的行和列都会立即返回到屏幕上,即不像我希望的那样单独到文件中(请阅读上面的(3))。

还请注意我想要的输出格式,即单独的行 e.t.c

有人可以帮忙吗?

#!/usr/bin/perl
use DBI;
@product = qw( orange apple);   ###an array created for products 
$count = 1;

# Connect to the database
details not provided

  my $dbh = DBI->connect("DBI:mysql:$db;host=$db_host",$mysql_user, $mysql_passwd) 
  ||    die "ERROR: Connecting: $DBI::errstr\n";
print "db connected\n";

foreach $product(@product)
  {

    # Prepare the SQL query for execution
    my $sth = $dbh->prepare(<<End_SQL) 
or die "Couldn't prepare statement: $DBI::errstr; stopped";
SELECT item_id, published, modified, availability, summary, 
product, reference FROM $my_table WHERE product LIKE '%$product%'
End_SQL

      # Execute the query
      $sth->execute() or die "Couldn't execute statement: $DBI::errstr; stopped";

    # Fetch each row and print it
    while ( my ($item_id, $published, $modified, $availability, $summary, $product, 
$reference) = $sth->fetchrow_array() )
      {
        print STDOUT ("ITEM ID: $item_id\n Product: $product\n Published: 
$published Modified:$modified\n Availability: $availability\n Summary: $summary\n 
Reference: $reference\n");};


    $count++;

  }
# Disconnect from the database
$dbh->disconnect();

【问题讨论】:

  • 您正在打印到STDOUT,而不是文件。为什么要写入文件?
  • 仅供参考,您应该使用or die,而不是|| die,因为优先级不同。
  • 嗨,Olaf,感谢您的回答 - 我知道我需要打印到文件,但不知道该怎么做,我只打印了 STDOUT 以向您展示我的代码到目前为止有效。谢谢你的推荐作品。我正在改进这个脚本,我的目标是为以特定格式返回的每一行发送电子邮件,而不是打印到文件,但想分阶段了解脚本的进度>首先打印到文件:-)这意味着我将拥有关于同一项目的其他问题。并感谢 Barmar 的提示

标签: mysql arrays database perl


【解决方案1】:

您必须创建一个文件并写入该文件,而不是 print STDOUT

open(my $f, ">$item_id") or die "Cannot create file $item_id: $!";
print $f "ITEM ID: $item_id\n Product: $product\n Published: $published Modified:$modified\n Availability: $availability\n Summary: $summary\n Reference: $reference\n";
close($f);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多