• [^] # Re: Une .db

    Posté par (site web personnel, Mastodon) . En réponse au message Fusion de plusieurs fichiers .db. Évalué à 3.

    Je confirme, il n'y a qu'une seule table et elle n'a pas de clef primaire

    $ sqlite3 ~/Downloads/16sept2022birds.db 
    SQLite version 3.37.0 2021年12月09日 01:34:53
    Enter ".help" for usage hints.
    sqlite> .tables
    detections
    sqlite> .header on
    sqlite> .mode column
    sqlite> pragma table_info('detections');
    cid name type notnull dflt_value pk
    --- ---------- ------------ ------- ---------- --
    0 Date DATE 0 0 
    1 Time TIME 0 0 
    2 Sci_Name VARCHAR(100) 1 0 
    3 Com_Name VARCHAR(100) 1 0 
    4 Confidence FLOAT 0 0 
    5 Lat FLOAT 0 0 
    6 Lon FLOAT 0 0 
    7 Cutoff FLOAT 0 0 
    8 Week INT 0 0 
    9 Sens FLOAT 0 0 
    10 Overlap FLOAT 0 0 
    11 File_Name VARCHAR(100) 1 0 
    sqlite> 

    Comme j'écrivais ailleurs, faudra les exporter tous pour réimporter dans une base finale.

    Il faut traiter la première du lot ainsi :

    sqlite> .output detections.sql
    sqlite> .dump detections
    sqlite> .quit

    Attention que le chemin peut être relatif ou absolu mais que chez moi ça ne connait pas des subtilités comme ~/Downloads/detections.sql
    Ensuite donc, pour les autres du lot :

    sqlite> .mode insert
    sqlite> .output detections.sql
    sqlite> select * from detections;
    sqlite> .exit

    Le mode insert va écrire les résultats sous forme insert into detections au lieu de l'habituel tableau des données. Cette astuce permet de ne pas dupliquer la partie create table detections

    Enfin, il faudra ouvrir le fichier detections.sql dans un éditeur pour déplacer la ligne commit; quelque part (cela provient du premier .dump) vers la fin (c'est requis vu qu'on a le seconde ligne qui est un begin transaction;) Ce n'est pas obligatoire mais c'est plus propret.
    Maintenant y a plus qu'à importer le fichier dans une nouvelle base toute propre

    sqlite> drop table if exists detections;
    sqlite> import detections.sql
    sqlite> .quit

    Si on n'est pas à l'aise avec la ligne de commande, il faut regarder du côté de SQLite Studio ou similaires.

    "It is seldom that liberty of any kind is lost all at once." ― David Hume