标签: dbi

如何在Perl的DBI中使用绑定查询选择空行?

我希望能够将某些内容传递给SQL查询,以确定是否只选择某个列为null的那些查询.如果我只是构建一个查询字符串而不是使用绑定变量,我会做类似的事情:

if ($search_undeleted_only)
{
    $sqlString .= " AND deleted_on IS NULL";
}
Run Code Online (Sandbox Code Playgroud)

但我想使用绑定查询.这会是最好的方式吗?

my $stmt = $dbh->prepare(...
    "AND (? = 0 OR deleted_on IS NULL) ");
$stmt->execute($search_undeleted_only);
Run Code Online (Sandbox Code Playgroud)

sql perl dbi

6
推荐指数
1
解决办法
362
查看次数

如何在使用DBI的Perl模块中获得100%的测试覆盖率?

我对Devel :: Cover模块有点新,但发现它确保我没有错过测试非常有用.

我遇到的一个问题是了解Devel :: Cover的报告.我查看了文档,但无法弄清楚我需要测试什么才能获得100%的覆盖率.

编辑 - 我应该说清楚我并不是说我需要100%的覆盖率,因为正如多人指出的那样,100%覆盖率是一个宽松的术语,并不意味着我的代码没有错误,并且可能并不总是完全必要.由于我是Devel :: Cover的新手,我很想知道 为什么我的代码不是100%覆盖,以防我错过了一些重要的测试.

以下是封面报告的输出:

line  err   stmt   bran   cond    sub    pod   time   code
...
36                                                    sub connect_database {
37             3                    3      1   1126       my $self = shift;
38             3    100                          24       if ( !$self->{dsn} ) {
39             1                                  7           croak 'dsn not supplied - cannot connect';
40                                                        }
41    ***      2            33                   21       $self->{dbh} = DBI->connect( $self->{dsn}, q{}, q{} )
42                                                          || croak "$DBI::errstr";
43             1                                 11       return $self;
44 …
Run Code Online (Sandbox Code Playgroud)

testing perl code-coverage dbi

6
推荐指数
2
解决办法
1163
查看次数

如何从Perl的DBI获取模式?

我正在使用Perl DBI.我知道$dbase->tables()将返回相应数据库中的所有表.同样,我想知道数据库中可用的模式.有没有可用的功能?

perl schema dbi

6
推荐指数
1
解决办法
5966
查看次数

Perl Parallel ::具有DBI数据库处理程序的ForkManager

我有兴趣并行执行多个数据库操作.我玩过Perl Parallel :: ForkManager,但还没有用过任何数据库.我已经读过这个数据库连接不受支持.有任何人对此有经验吗?

作为一个例子,我可能会产生一个系统调用(它使DBI工作)不是原始代码,即

#!/opt/local/bin/perl -w

use strict;
use Parallel::ForkManager;

$| = 1;

my $max_procs = 10;

my $pm =  new Parallel::ForkManager($max_procs);

for (my $var = 0; $var <= 10; $var++) {
  my $pid = $pm->start('proc'.$var) and next;
  sleep ( 2 );
  system( "./DBworker.pl $var" );
  $pm->finish(0); 
}

print "Waiting for child procs\n";
$pm->wait_all_children;
print "complete!\n";
Run Code Online (Sandbox Code Playgroud)

parallel-processing perl dbi

6
推荐指数
1
解决办法
3199
查看次数

Perl,DBI和SQL:为什么NOT在某些SQL查询中不起作用?

我有一个最奇怪的问题,我对SQL的非常基本的知识必定是非常错误的,但我无法理解下面说明的行为.

我有这个文件 test.csv

id,field
A,0
B,1
C,2
D,"0"
E,"1"
F,"2"
G,
H,""
I," "
Run Code Online (Sandbox Code Playgroud)

而这个测试代码:

#! /usr/bin/perl

use strict;
use warnings;
use DBI;
use Devel::VersionDump qw(dump_versions);

my $dbh = DBI->connect ("dbi:CSV:");
$dbh->{RaiseError} = 1;
$dbh->{TraceLevel} = 0;
my $i = 0;

foreach my $cond ("TRUE",
                  "field <> 0 AND field <> 1",
                  "field = 0 OR field = 1",
                  "NOT (field = 0 OR field = 1)",
                  "NOT field = 0 OR field = 1",
                  "field <> 0",
                  "NOT field …
Run Code Online (Sandbox Code Playgroud)

sql csv perl dbi

6
推荐指数
1
解决办法
341
查看次数

当我尝试连接到Oracle 11g时,为什么Perl的DBI会抱怨"失败:错误OCIEnNN创建"?

我使用简单的Perl脚本连接到Oracle 11g数据库时出现以下错误:

 failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var  or PATH (Windows) and or NLS settings, permissions, etc. at
Run Code Online (Sandbox Code Playgroud)

脚本如下:

#!/usr/local/bin/perl

use strict;
use DBI;

if ($#ARGV < 3) {
print "Usage: perl testDbAccess.pl dataBaseUser dataBasePassword SID dataBasePort\n";
exit 0;
}
my ($user, $pwd, $sid, $port) = @ARGV;

my $host = `hostname`;
my $dbh;
my $sth;
my $dbname = "dbi:Oracle:HOST=$host;SID=$sid;PORT=$port";

openDbConnection();
closeDbConnection();

sub openDbConnection() {
        $dbh = DBI->connect ($dbname, $user ,$pwd , { RaiseError => 1}) || die "Database …
Run Code Online (Sandbox Code Playgroud)

oracle perl dbi

5
推荐指数
1
解决办法
2万
查看次数

DBI :: InterfaceError:无法加载驱动程序(未初始化的常量MysqlError)

我收录了宝石,

dbd-mysql (0.4.4)
dbi (0.4.5)
mysql (2.8.1)
Run Code Online (Sandbox Code Playgroud)

在我运行以下代码时在rails控制台上,

require 'rubygems'
require "dbi"
require 'dbd-mysql'
dbh = DBI.connect("DBI:Mysql:TestDB:localhost","username", "pwd")

1.9.2-p180 :001 > require 'rubygems'
 => false 
1.9.2-p180 :002 > require "dbi"
 => false 
1.9.2p180 :003 > require 'dbd-mysql'
LoadError: no such file to load -- dbd-mysql
from /.rvm/gems/ruby-1.9.2-p180@rails3/gems/dbi-0.4.5/lib/dbi.rb:318:in `rescue in load_driver'
    from /.rvm/gems/ruby-1.9.2-p180@rails3/gems/dbi-0.4.5/lib/dbi.rb:242:in `load_driver'
    from /.rvm/gems/ruby-1.9.2-p180@rails3/gems/dbi-0.4.5/lib/dbi.rb:160:in `_get_full_driver'
    from /.rvm/gems/ruby-1.9.2-p180@rails3/gems/dbi-0.4.5/lib/dbi.rb:145:in `connect'
    from (irb):3
    from /.rvm/gems/ruby-1.9.2-p180@rails3/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start'
    from /.rvm/gems/ruby-1.9.2-p180@rails3/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start'
    from /.rvm/gems/ruby-1.9.2-p180@rails3/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

1.9.2-p180 :004 > …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails dbi ruby-on-rails-3 ruby-1.9.2

5
推荐指数
1
解决办法
1574
查看次数

为什么我得到0E0作为DBI"execute"方法的返回值?

我编写了一个示例Perl程序来从数据库表中删除数据.

这是我写的代码,

use DBI;

my $dbh = DBI->connect("DBI:Pg:host=192.168.12.23;port=5432;", "adhi");                                                                                
if ( $dbh ) {

    print "Connected successfully\n";

    my $exe = $dbh->prepare("delete from perl_test.test");
    my $res = $exe->execute();
    if ( $res ) {
        print "deleted the table successfully of rows: $res\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我已执行上述操作,则应打印成功的消息,然后删除已删除的行数.

如果表是空的,则打印0E0而不是0.我不知道它是如何返回这样的值?

有人可以解释一下它是如何工作的吗?

perl dbi

5
推荐指数
1
解决办法
1448
查看次数

在 R 中查询 PostgreSQL 数据库时,如何修复警告消息“关闭打开的结果集,取消先前的查询”?

下面是我在 R 中用于从 PostgreSQL 数据库中提取 ID 的代码片段。当我运行该函数时,我从 R 收到以下警告消息:

在 result_create(conn@ptr, statements) 中:关闭打开的结果集,取消之前的查询

options(warn=-1)如何避免出现此警告消息而不在代码开头 使用,抑制警告而不是

con <- dbConnect(RPostgres::Postgres(),
                 user = "postgres",
                 dbname  = "DataBaseName",
                 password  = "123456",
                 port  = 5431)


get_id <- function(connection, table){

  query <- toString(paste("SELECT id FROM ", table, sep = ""))
  data_extract_query <- dbSendQuery(connection, query)
  data_extract <- dbFetch(data_extract_query)
  return(data_extract)
}


get_id(con, "users") 

Run Code Online (Sandbox Code Playgroud)

postgresql r dbi rpostgresql

5
推荐指数
1
解决办法
3345
查看次数

nanodbc/nanodbc.cpp:1617: 00000: [Snowflake][Support] (40465) 执行转换时字符串数据被截断

我正在尝试通过 R studio 使用 DBI:: dbAppendTable() 将数据帧插入到雪花数据库的表中。datafarme 中的行数为 5000。仅当我总共加载所有 5000 行时,才会出现上述错误。在表中插入 1024 行后查询失败。如果我使用循环加载大小为 100 的批次,它不会失败。我的字符串大小也不会超出 VARCHAR 列大小。我从未见过雪花出现此错误。希望有人对此有任何见解。

etl r dbi snowflake-cloud-data-platform

5
推荐指数
0
解决办法
1924
查看次数