10
votes

Importer le fichier CSV dans la base de données SQLITE3 dans la ligne de commande ou via un fichier batch

J'aimerais demander s'il y a de toute façon pour importer un fichier CSV contenant la sortie de mes instructions SELECT dans SQLite3 dans une nouvelle base de données? Voici les codes que j'ai faites jusqu'à présent: xxx

Comme vous pouvez le voir mon premier code était de jeter les requêtes effectuées.

La deuxième ligne de code I ' m Tentative de créer une nouvelle base de données et de tenter d'importer le fichier CSV dans le tableau "Test"

Merci pour toute aide faite à l'avance! : D


2 commentaires

La grande question que j'ai besoin de demander ici est la suivante: pourquoi avez-vous besoin de faire cela? Est-ce une opération unique, fait-elle partie d'un programme?


oui cela fait partie d'un programme. J'ai l'intention d'exécuter le script de lot pour générer ma propre table pour réduire le temps de traitement de la présentation graphique dans mon programme PHP


6 Réponses :


11
votes

Je recommanderais de faire votre importation à partir d'un fichier plat, qui créera votre schéma suivi avec l'importation réelle:

Comme: p> xxx pré>

où le contenu d'importation.sql est la suivante: p> xxx pré>

une autre approche que vous n'ayez peut-être pas considéré comme est le joindre commande. Vous pouvez joindre une nouvelle base de données, créer la table dedans et importer à sa table, de sorte que vous n'avez pas l'étape supplémentaire d'exportation vers la CSV puis en réparsse. Il peut s'agir d'un Créer une table ... comme sélectionnez ... Query ou juste un insert. P>

Donc, fondamentalement, vous exécutez (de votre page PHP): P>

"ATTACH 'c:\directory\to\database\test.db' as TESTDB;"
"CREATE TABLE TESTDB.test (name varchar(255) not null, blah varchar(255) not null);"
"IMPORT INTO TESTDB.test SELECT local_port AS port, COUNT(local_port) AS hitcount FROM connections  WHERE connection_type = 'accept' GROUP BY local_port ORDER BY hitcount DESC;"


8 commentaires

Je suis désolé de ne pas bien comprendre votre premier paragraphe. Comme j'utilise le script de lots. Je ne peux pas utiliser les commandes du point?


Merci beaucoup pour la réponse rapide. Ils sont revenus avec une erreur disant d'erreur: attendu 2 colonnes de données mais trouvées 1. Est-ce que mon 1er code génère une seule colonne? J'ai ouvert le fichier CSV et remarqué 2 colonnes remplies.


Désolé, j'ai oublié ça .import et -csv créent différents séparateurs. S'il vous plaît voir mes modifications.


Je n'arrive pas à exécuter un script à partir d'un fichier sur une base de données SQLite3 de cette manière - il se plaint Erreur: incomplet SQL: .Separator, options de sortie.csv


@Michaelforrest éléments n'est pas une commande SQL. Si vous avez besoin d'aide supplémentaire, vous feriez mieux de commencer une nouvelle question.


éléments est l'équivalent du "test" dans la commande discutée (comme dans .Import test.csv test - c'est un argument pour le .import . Je pense que c'est un commentaire valide pour cette question.


Peut-être que je manque juste une pause de ligne de fin.


Non, c'était parce que tout dans le fichier était en retrait lorsque j'ai généré le script de Ruby! OK, c'est pas grave.



0
votes

Vous pouvez faire beaucoup de choses avec les commutateurs SQLITE Command Shell et Command-ligne ... ... Mais je vous exhorte fortement à vous demander de trouver un langage de script snlite-conscient qui fonctionnera sur Windows et que vous vous sentez à l'aise.

Perl et Python sont deux excellents choix. Les deux support SQLLITE, les deux sont librement disponibles pour Windows.

et les deux peuvent gérer cela - et de nombreux autres types de tâches.


0 commentaires

-1
votes

J'ai noué d'importer de nombreux fichiers CSV, j'ai donc écrit le script Python suivant qui effectue le travail de création et de chargement de tables SQLite à partir de fichiers CSV, à l'aide de la première ligne du CSV comme noms de champs pour la table:

#!/usr/bin/env python
import sqlite3
from csv import DictReader

class SQLiteDB():
    def __init__(self, dbname=':memory:'):
        self.db=sqlite3.connect(dbname)

    def importFromCSV(self, csvfilename, tablename, separator=","):
        with open(csvfilename, 'r') as fh:
            dr = DictReader(fh, delimiter=separator)
            fieldlist=",".join(dr.fieldnames)
            ph=("?,"*len(dr.fieldnames))[:-1]
            self.db.execute("DROP TABLE IF EXISTS %s"%tablename)
            self.db.execute("CREATE TABLE %s(%s)"%(tablename, fieldlist))
            ins="insert into %s (%s) values (%s)"%(tablename, fieldlist, ph)
            for line in dr:
                v=[]
                for k in dr.fieldnames: v.append(line[k])
                self.db.execute(ins, v)
        self.db.commit()

if __name__ == '__main__':
    db=SQLiteDB("mydatabase.sqlite")
    db.importFromCSV("mydata.csv", "mytable")


0 commentaires

1
votes

Pour les gros fichiers CSV, il peut être plus efficace d'utiliser la commande SQLITE3 SQLITE3 .IMPORT , plutôt que d'analyser le fichier dans Python et d'insérer des lignes avec SQLITE3 module. Il peut être fait via OS.System (sur Linux, Unix ou Mac OS X ou Cygwin sous Windows): XXX


0 commentaires

4
votes

Une commande à un seul fichier pour importer un fichier via Bash qui a fonctionné pour moi: xxx

espère que cela aide.


0 commentaires

0
votes

Tout d'abord, vous avez besoin d'un vrai fichier CSV correct avec la ligne de séparateur de virgule et de la ligne d'en-tête. J'ai utilisé l'outil de décharge de PHPSTorm pour cela.

Mettez tous les fichiers dans un dossier. P>

Ouvrir cmd.exe strong> p>

Créer une importation déclarations où% ~ na est le nom de fichier sans extension sous forme de nom de table fort> p> xxx pré>

start sqlite avec un dB factice fort> p>

.q


0 commentaires