Mickymaus: SQlite Spaltennamen

guten tag.
Ich habe ein langes Array von Werten, die nach dem Schema "Name:Wert" angeordnet sind. Diese möchte ich nun in eine große Datenbank einordnen. Und zwar in SQLite. Gibt es eine Möglichkeit das ungefähr so zu machen:

Wenn Name als Spalte in Datenbank X vorhanden ist:  
     Füge Wert in Spalte "Name" ein.

Kann man das irgendwie bereits in dem SQL statement überprüfen? Das einzige was ich finde sind so Abfragen über die sqlite_master Tabelle. Allerdings kann ich durch die nur an die verschiedenen Tabellennamen, aber nicht an die Spaltennamen rankommen. Wie kriege ich das also hin? Vielen Dank.

  1. Tach!

    Wenn Name als Spalte in Datenbank X vorhanden ist:

    Füge Wert in Spalte "Name" ein.

    
    > Kann man das irgendwie bereits in dem SQL statement überprüfen?  
      
    Nicht dass ich wüsste. Variable Feldnamen sind sind nicht vorgesehen.  
      
    
    > Das einzige was ich finde sind so Abfragen über die sqlite\_master Tabelle. Allerdings kann ich durch die nur an die verschiedenen Tabellennamen, aber nicht an die Spaltennamen rankommen. Wie kriege ich das also hin?  
      
    Man findet auch den Hinweis auf PRAGMA table\_info(table\_name);  
      
      
    dedlfix.
    
    1. Wenn ich das richtig verstanden habe, dann müsste es ja so gehen:

      FOR EVERY TABLE IN DATABSE:
          $columnnames += query(PRAGMA table_info( $TABLE ))

      --

      For every element of $columnnames:
        if(columnnames['name'] == "name")
           insert...

      So ungefähr müsste es dann doch in Pseudocode gehen, oder? Ich kenne mich bloß absolut nicht aus in SQlite.

      1. Tach!

        For every element of $columnnames:
          if(columnnames['name'] == "name")
             insert...

        So ungefähr müsste es dann doch in Pseudocode gehen, oder? Ich kenne mich bloß absolut nicht aus in SQlite.

        Ich kenne die Struktur deiner Daten nicht. Wenn das insert in deinem Pseudo-Code für ein Insert-Statement steht, dann ist das vermutlich nicht das was du willst. Dann könntest du besser eine Tabelle mit den zwei Feldern Name und Value erstellen und da die Werte einfach anhängen.

        dedlfix.

  2. Man muss ja nicht zwingend alles in SQL machen. Vernünftige Datenbankschnittstellen bieten auch Introspektion der verwendeten Namen an.

    use DBI qw();  
    my $DB = 'mickymaus.sqlite';  
    my $TABLE = 'mickymaus';  
      
    my $dbh = DBI->connect("DBI:SQLite:db=$DB", undef, undef, {AutoCommit => 1, RaiseError => 1, sqlite_unicode => 1,});  
    $dbh->do("create table $TABLE (id text, fnord text)");  
    my %col = %{ $dbh->column_info(undef, undef, $TABLE, undef)->fetchall_hashref('COLUMN_NAME') };  
      
    $dbh->begin_work;  
    for my $pair (qw(id:foo id:bar id:quux fnord:23 fnord:42 fnord:fnord:fnord)) {  
        my ($col, $val) = split qr/:/, $pair, 2;  
        die "$col invalid" unless exists $col{$col};  
        $dbh->do("insert into $TABLE ($col) values (?)", {}, $val);  
    }  
    $dbh->commit;  
    
    
  3. Hallo,

    Du könntest dir vielleicht auch einfach eine Tabelle mit den spalten key und value machen und dann alles mögliche da reinschreiben.

    Jeena