使用 Perl 上传到数据库

发布于 2024-11-19 03:41:01 字数 2121 浏览 1 评论 0原文

我有以下 Perl 脚本,用于将数据从 html 文件直接导入数据库。该文件名为“demo.htm”。该脚本无需数据库连接部分即可工作,因为它删除了我不需要的内容。但是现在我尝试读取 html 文件并输入到数据库中,但这些调整不起作用。数据库、用户和密码都是“演示”,它使用 SQL Server 2008 R2 数据库。

use warnings; 
use strict;  
use DBI;
use HTML::TreeBuilder;  

open (FILE, "demo") || die "couldn't open the file!";
open (F1, ">demo.htm") || die "couldn't open the file!";
open (F2, ">demo2.csv") || die "couldn't open the file!";

# database name, user and password
my $data_source = q/dbi:ODBC:demo/;
my $user = q/demo/;
my $password = q/demo/;

# Connect to the data source and get a handle for that connection.
my $dbh = DBI->connect($data_source, $user, $password)
or die "Can't connect to $data_source: $DBI::errstr";

print F1 "Name\|Lives In\|Commented\n";
print F2 "Name\|Lives In\|Commented\text\n";

my $tree = HTML::TreeBuilder->new_from_content(     do { local $/; <DATA> } ); 

for ( $tree->look_down( 'class' => 'postbody' ) ) 
{    
my $location = $_->look_down( 'class' => 'posthilit' )->as_trimmed_text;     

my $comment  = $_->look_down( 'class' => 'content' )->as_trimmed_text;     

my $name     = $_->look_down( '_tag'  => 'h3' )->as_text;     

$name =~ s/^Re:\s*//;     $name =~ s/\s*$location\s*$//;      

print "Name: $name\nLives in: $location\nCommented: $comment\n"; } 

# This query generates a result set with one record in it.
#my $sql = "SELECT 1 AS test_col";

my $sql = "insert into demo2 values \(Name, Lives In, Comeented, text)";

print $sql;
print "\n";

# Prepare the statement.
my $sth = $dbh->prepare($sql)
or die "Can't prepare statement: $DBI::errstr";

# Execute the statement.
$sth->execute();

}
print $b;
print " end\n";

# Disconnect the database from the database handle.
$dbh->disconnect;

任何有关我在这方面出错的地方的帮助将不胜感激。 html 的一个例子是 -

<div class="postbody">         <h3><a href "foo">Re: John Smith <span class="posthilit">England</span></a></h3>         <div class="content">Is C# better than Visula Basic?</div>     </div> 

I have the folling Perl script that I am using to import data directly into a database form an html file. The file is called 'demo.htm'. The script works without the databse connection part in that it strips off what I do not need. However now I am trying to read in the html file and input into the database and these adaptations are not working. The db, user and password are all 'demo' and it is using a SQL server 2008 R2 database.

use warnings; 
use strict;  
use DBI;
use HTML::TreeBuilder;  

open (FILE, "demo") || die "couldn't open the file!";
open (F1, ">demo.htm") || die "couldn't open the file!";
open (F2, ">demo2.csv") || die "couldn't open the file!";

# database name, user and password
my $data_source = q/dbi:ODBC:demo/;
my $user = q/demo/;
my $password = q/demo/;

# Connect to the data source and get a handle for that connection.
my $dbh = DBI->connect($data_source, $user, $password)
or die "Can't connect to $data_source: $DBI::errstr";

print F1 "Name\|Lives In\|Commented\n";
print F2 "Name\|Lives In\|Commented\text\n";

my $tree = HTML::TreeBuilder->new_from_content(     do { local $/; <DATA> } ); 

for ( $tree->look_down( 'class' => 'postbody' ) ) 
{    
my $location = $_->look_down( 'class' => 'posthilit' )->as_trimmed_text;     

my $comment  = $_->look_down( 'class' => 'content' )->as_trimmed_text;     

my $name     = $_->look_down( '_tag'  => 'h3' )->as_text;     

$name =~ s/^Re:\s*//;     $name =~ s/\s*$location\s*$//;      

print "Name: $name\nLives in: $location\nCommented: $comment\n"; } 

# This query generates a result set with one record in it.
#my $sql = "SELECT 1 AS test_col";

my $sql = "insert into demo2 values \(Name, Lives In, Comeented, text)";

print $sql;
print "\n";

# Prepare the statement.
my $sth = $dbh->prepare($sql)
or die "Can't prepare statement: $DBI::errstr";

# Execute the statement.
$sth->execute();

}
print $b;
print " end\n";

# Disconnect the database from the database handle.
$dbh->disconnect;

Any help on where I have gone wrong with this would be greatly appreciated. An example of the html is -

<div class="postbody">         <h3><a href "foo">Re: John Smith <span class="posthilit">England</span></a></h3>         <div class="content">Is C# better than Visula Basic?</div>     </div> 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

这个俗人 2024-11-26 03:41:01

在 SQL 查询中,您应该使用提取的数据。

my $sql = "insert into demo2 values (?,?,?,?)";
...
$sth->execute($name,$location,$comment,'');

In your SQL query you should use data that you extracted.

my $sql = "insert into demo2 values (?,?,?,?)";
...
$sth->execute($name,$location,$comment,'');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文