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: Comme vous pouvez le voir mon premier code était de jeter les requêtes effectuées. P> 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" P> Merci pour toute aide faite à l'avance! : D p> p>
6 Réponses :
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> où le contenu d'importation.sql est la suivante: p> 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;"
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 code>
@Michaelforrest éléments code> n'est pas une commande SQL. Si vous avez besoin d'aide supplémentaire, vous feriez mieux de commencer une nouvelle question.
éléments code> est l'équivalent du "test" dans la commande discutée (comme dans
.Import test.csv test code> - c'est un argument pour le
.import code> . 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.
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. P>
Perl et Python sont deux excellents choix. Les deux support SQLLITE, les deux sont librement disponibles pour Windows. P>
et les deux peuvent gérer cela - et de nombreux autres types de tâches. P>
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")
Pour les gros fichiers CSV, il peut être plus efficace d'utiliser la commande SQLITE3 CODE> SQLITE3 CODE> .IMPORT code>, plutôt que d'analyser le fichier dans Python et d'insérer des lignes avec
SQLITE3 code> module. Il peut être fait via
OS.System code> (sur Linux, Unix ou Mac OS X ou Cygwin sous Windows):
Une commande à un seul fichier pour importer un fichier via Bash qui a fonctionné pour moi: espère que cela aide. p> p>
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> start sqlite avec un dB factice fort> p> .q
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