Comment importer des fichiers CSV et TSV dans SQLite avec Python

introduction

sqlite-183454_640.png

Je veux importer des données CSV et TSV dans SQLite DB avec Python! Ceci explique comment importer avec un seul script pour ces personnes.

Veuillez vous référer aux articles suivants pour savoir ce qu'est SQLite et comment le configurer. Technique de création d'environnement SQL local facile réalisée par Python et SQLite

Méthode d'importation

Voir «Explication» ci-dessous pour savoir comment l'utiliser.

scénario

import_data_to_sqlite.py


import sqlite3
import csv
import os

#######↓ Modifiez les paramètres ici ↓#######
dbname = ''
target_table_name = ''
import_table_name = ''
is_create_table = 
is_header_skip = 
#####################################


#######↓ Importer la table de destination DDL ↓#######
sql_script = """

"""
#######################################

class ImportSQLite():
    def __init__(self, dbname, target_table_name, import_data_name, is_create_table, is_header_skip=False, sql_create_table=None):
        """
Importer des fichiers csv ou tsv dans SQLite
        :param dbname:texte Nom de la base de données de destination de la connexion
        :param target_table_name:texte Nom de la table sur le DB à importer
        :param import_data_name:texte Le nom des données que vous souhaitez importer
        :param is_create_table:booléen Créer ou non une table dans laquelle importer
        :param is_header_skip:booléen Ignorer l'en-tête des données à importer
        :param sql_create_table:texte DDL de la table à importer
        """
        self.dbname = dbname
        self.target_table_name = target_table_name
        self.import_data_name = import_data_name
        self.is_create_table = is_create_table
        self.is_header_skip = is_header_skip
        _, raw_delimiter = os.path.splitext(import_data_name)
        if raw_delimiter == '.csv':
            self.delimiter = ','
        elif raw_delimiter == '.tsv':
            self.delimiter = '\t'
        else:
            raise ValueError('Import file should be csv or tsv.')

        if is_create_table:
            if not sql_create_table:
                raise ValueError('It\'s necessary of sql to create table')
            else:
                self.sql_create_table = sql_create_table


    def read_import_file(self):
        with open(self.import_data_name, 'r', encoding='utf-8') as f:
            reader = csv.reader(f, delimiter=self.delimiter)
            if self.is_header_skip:
                header = next(reader)

            return [i for i in reader]


    def pick_column_num(self, import_data):
        """
Calculer le nombre de colonnes dans le fichier d'importation
        :param import_data: array(two-dimensional)
        :return: int
        """
        columns = []
        for raw in import_data:
            columns.append(len(raw))
        if len(set(columns)) == 1:
            return columns[0]
        else:
            raise ValueError('this import files has diffrenect column numbers.')


    def insert_csv_file(self):
        input_file = self.read_import_file()
        column = self.pick_column_num(input_file)
        val_questions = ['?' for i in range(column)]
        cur.executemany("insert into {0} values ({1})".format(self.target_table_name, ','.join(val_questions)), input_file)


if __name__ == '__main__':

    sql = ImportSQLite(
        dbname=dbname,
        target_table_name=target_table_name,
        import_data_name=import_table_name,
        is_create_table=is_create_table,
        is_header_skip= is_header_skip,
        sql_create_table=sql_script
    )

    conn = sqlite3.connect(sql.dbname)
    cur = conn.cursor()

    if sql.is_create_table:
        cur.execute('drop table if exists {};'.format(target_table_name))
        cur.execute(sql.sql_create_table)

    sql.insert_csv_file()

    conn.commit()
    conn.close()

Commentaire

Éléments de réglage

Nom de variable Moule Méthode de réglage
dbname Text Nom de base de données de la destination de connexion. Spécifiez sous la forme d'un chemin.
target_table_name Text Le nom de la table sur le DB à importer
import_table_name Text Le nom des données que vous souhaitez importer. Spécifiez sous la forme d'un chemin.
is_create_table Boolean(True or False) Créer une table vers laquelle importer
is_header_skip Boolean(True or False) S'il faut ignorer l'en-tête des données à importer

Remarques

--Lors de la création de la table de destination d'importation, si vous ne définissez pas la requête de création, elle échouera avec une erreur. --Si vous spécifiez un fichier autre que csv ou tsv comme entrée, il sera lu.

Utilisation et échantillon

Par exemple, si vous disposez du CSV suivant et qu'il n'y a pas encore de table dans le DB de destination de la connexion

students.csv


id,name,class,blood_type
1,Mike,Moon,B
2,Bob,Song,A
3,Gonzalez,Star,AB
4,Alex,Moon,

Les éléments de réglage sont les suivants.

(Ouverture) import_data_to_sqlite.py


#######↓ Modifiez les paramètres ici ↓#######
dbname = 'test.db' # '/home/user/test.db'Peut également être spécifié sous la forme de
target_table_name = 'students'
import_table_name = 'students.csv' # '/home/user/students.csv'Peut être spécifié sous la forme de
is_create_table = True
is_header_skip = True
#################################


#######↓ Créer une table DDL pour la destination d'importation ↓#######
sql_script = """
create table students(
    id integer,
    name text,
    class text,
    blood_type text
);
"""
#######################################

Tout ce que vous avez à faire est de le démarrer normalement

kick.sh


$ python import_data_to_sqlite.py

C'est tout.

Recommended Posts

Comment importer des fichiers CSV et TSV dans SQLite avec Python
Importer tsv avec Python
Comment lire un fichier CSV avec Python 2/3
Grattage de la nourriture avec python et sortie en CSV
Résumé de la façon d'importer des fichiers dans Python 3
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
[Python] Comment fractionner et modulariser des fichiers (simple, exemple)
Écrire en csv avec Python
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
Comment télécharger des fichiers sur Cloud Storage avec le SDK Python de Firebase
Comment entrer dans l'environnement de développement Python avec Vagrant
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Python: comment utiliser async avec
[Python] Ecrire dans un fichier csv avec Python
Comment utiliser SQLite en Python
Sortie vers un fichier csv avec Python
Comment démarrer avec Python
Gérer les fichiers Excel CSV avec Python
Comment calculer la date avec python
Lire et écrire du CSV avec Python
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
Comment changer le SQLite3 de Django téléchargé sur python n'importe où avec juste une interface graphique
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Comment gérer les erreurs lors de l'installation de Python et de pip avec choco
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
[Python] Comment convertir un fichier db en csv
[Linux] Comment subdiviser des fichiers et des dossiers
Comment empaqueter et distribuer des scripts Python
Comment convertir csv en tsv dans la CLI
Mettez des tampons de protocole dans sqlite avec python
Fractal pour faire et jouer avec Python
Comment utiliser BigQuery en Python
[Python] Comment utiliser import sys sys.argv
Lire et écrire des fichiers csv avec numpy
Comment faire un test de sac avec python
Lire et écrire des fichiers JSON avec Python
Comment afficher le japonais python avec lolipop
Essayer de gérer SQLite3 avec Python [Note]
Lire Python csv et exporter vers txt
python: Comment utiliser les locals () et globals ()
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Comment entrer le japonais avec les malédictions Python
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Compressez les données python et écrivez sur sqlite
Comment lire des fichiers CSV avec Pandas
Comment utiliser is et == en Python
Comment installer python3 avec docker centos
[Introduction à Python] Comment juger de l'authenticité avec l'instruction if (True et None)
Comment obtenir la différence de date et d'heure en secondes avec Python
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Créer un babillard Heroku, Flask, Python, Nyanko avec "fichier csv"
Comment télécharger avec Heroku, Flask, Python, Git (4)