[Bioperl-l] Bio::DB::BioDB - insert failed. Dupllicate entry '' for key 2?

Chris Fields cjfields at uiuc.edu
Sat Mar 4 23:10:44 EST 2006


Sorry if I'm a bit off (pub you know) but have you tried the bioperl- 
db script load_seqdatabase.pl (scripts dir)?  Have you loaded taxonomy?

Chris

On Mar 4, 2006, at 5:52 PM, Jay Hannah wrote:

> Greetings --
>
> I'm trying to load my bioperl-db database (mySQL on Linux). I seem  
> to be able to load 1 sequence at a time, but whenever I try to load  
> the 2nd sequence, if fails with the output below...
>
>
> Here's my script:
> ---------------------------------------
> #!/usr/bin/perl
>
> use strict;
> use Bio::SeqIO;
> use Bio::DB::BioDB;
>
> my $db = Bio::DB::BioDB->new(
>         -database   => "biosql",
>         -host       => 'localhost',
>         -port       => 3306,
>         -dbname     => 'VIRUS',
>         -driver     => 'mysql',
>         -user       => 'dbastola',
>         -pass       => '-----------',
> );
>
> my $file = "/home/dbastola/genbankSequences/GBVRL/gbvrl_2006_Jan/ 
> GB_Sequences/gbvrl1.seq";
> my $infile  = Bio::SeqIO->new(-file => $file,  -format => 'GenBank');
>
> my $seq = $infile->next_seq();
> my $species = $seq->species;
> print join " | ", $species->classification;
> print "\n";
>
> my $pseq = $db->create_persistent($seq);
> $pseq->create() or die "create failed";
> $pseq->commit;
> exit;
> ------------------------------------
>
>
> Output:
>
> $ perl j2.pl
> Human adenovirus type 15 | Mastadenovirus | Adenoviridae | dsDNA  
> viruses, no RNA stage | Viruses
>
> -------------------- WARNING ---------------------
> MSG: insert in Bio::DB::BioSQL::BioNamespaceAdaptor (driver)  
> failed, values were ("","") FKs ()
> Duplicate entry '' for key 2
> ---------------------------------------------------
>
> ------------- EXCEPTION  -------------
> MSG: create: object (Bio::DB::Persistent::BioNamespace) failed to  
> insert or to be found by unique key
> STACK Bio::DB::BioSQL::BasePersistenceAdaptor::create /usr/lib/ 
> perl5/site_perl/5.8.3/Bio/DB/BioSQL/BasePersistenceAdaptor.pm:208
> STACK Bio::DB::Persistent::PersistentObject::create /usr/lib/perl5/ 
> site_perl/5.8.3/Bio/DB/Persistent/PersistentObject.pm:245
> STACK Bio::DB::BioSQL::BasePersistenceAdaptor::create /usr/lib/ 
> perl5/site_perl/5.8.3/Bio/DB/BioSQL/BasePersistenceAdaptor.pm:171
> STACK Bio::DB::Persistent::PersistentObject::create /usr/lib/perl5/ 
> site_perl/5.8.3/Bio/DB/Persistent/PersistentObject.pm:245
> STACK toplevel j2.pl:26
>
> --------------------------------------
>
>
> At this point I can see my first sequence loaded into mySQL.  
> biodatabase and biosequence have stuff in them. e.g.:
>
>
> mysql> select * from biodatabase;
> +----------------+------+-----------+-------------+
> | biodatabase_id | name | authority | description |
> +----------------+------+-----------+-------------+
> |             23 |      | NULL      | NULL        |
> +----------------+------+-----------+-------------+
> 1 row in set (0.00 sec)
>
>
>
> And I noticed that if I delete that sequence from the database, I  
> can once again load it, and the number biodatabase_id (23)  
> increments. 20, 21, 22, 23, etc.
>
> I'm trying to end up with a loop something like this:
>
> while (my $seq = $infile->next_seq()) {
>    print "   " . $seq->display_id . "\n";
>    my $adp = $db->get_object_adaptor($seq);
>    my $lseq = $adp->find_by_unique_key($seq);
>    if ($lseq) {
>       print "Already loaded! Deleting.\n";
>       print "   Primary key: " . $lseq->primary_key . "\n";
>       $lseq->remove;
>       $lseq->commit;
>    }
>    print "Loading...\n";
>    my $pseq = $db->create_persistent($seq);
>    $pseq->create or die "create failed";
>    $pseq->commit or die "commit failed";
>    $adp->commit;  # ???
> }
>
> But I can't seem to get more than 1 to load. Ever.
>
> Is the bioperl-db code not reading/incrementing the biodatabase_id  
> correctly? Am I skipping a step that makes that increment occur? Am  
> I messing up the PK/FK somehow?
>
> phpMyAdmin says that the Next AutoIndex for the bioentry table is  
> 24... So that's good?
>
> Thanks,
>
> j
> Omaha Perl Mongers
> http://omaha.pm.org
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l

Christopher Fields
Postdoctoral Researcher
Lab of Dr. Robert Switzer
Dept of Biochemistry
University of Illinois Urbana-Champaign





More information about the Bioperl-l mailing list