Ich möchte CSV- und TSV-Daten mit Python in SQLite DB importieren! Dies ist eine Erklärung zum Importieren mit einem einzigen Skript für solche Personen.
In den folgenden Artikeln erfahren Sie, was SQLite ist und wie es eingerichtet wird. Einfache Technik zur Erstellung lokaler SQL-Umgebungen, die von Python und SQLite realisiert wurde
Siehe "Erklärung" unten für die Verwendung.
import_data_to_sqlite.py
import sqlite3
import csv
import os
#######↓ Ändern Sie hier die Parameter ↓#######
dbname = ''
target_table_name = ''
import_table_name = ''
is_create_table =
is_header_skip =
#####################################
#######↓ Zieltabelle DDL importieren ↓#######
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):
"""
Importieren Sie CSV- oder TsV-Dateien in SQLite
:param dbname:Text Name der Verbindungsziel-DB
:param target_table_name:text Tabellenname in der zu importierenden Datenbank
:param import_data_name:text Der Name der Daten, die Sie importieren möchten
:param is_create_table:boolean Gibt an, ob eine Tabelle zum Importieren erstellt werden soll
:param is_header_skip:boolean Gibt an, ob der Header der zu importierenden Daten übersprungen werden soll
:param sql_create_table:Text-DDL der zu importierenden Tabelle
"""
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):
"""
Berechnen Sie die Anzahl der Spalten in der Importdatei
: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()
Variablennamen | Schimmel | Einstellmethode |
---|---|---|
dbname | Text | DB-Name des Verbindungsziels. Geben Sie in Form eines Pfads an. |
target_table_name | Text | Der Name der Tabelle in der zu importierenden Datenbank |
import_table_name | Text | Der Name der Daten, die Sie importieren möchten. Geben Sie in Form eines Pfads an. |
is_create_table | Boolean(True or False) | Gibt an, ob eine Tabelle zum Importieren erstellt werden soll |
is_header_skip | Boolean(True or False) | Gibt an, ob der Header der zu importierenden Daten übersprungen werden soll |
Wenn Sie beispielsweise die folgende CSV haben und noch keine Tabelle in der Verbindungsziel-DB vorhanden ist
students.csv
id,name,class,blood_type
1,Mike,Moon,B
2,Bob,Song,A
3,Gonzalez,Star,AB
4,Alex,Moon,
Die Einstellungselemente sind wie folgt.
(Öffnungs-) Import_data_to_sqlite.py
#######↓ Ändern Sie hier die Parameter ↓#######
dbname = 'test.db' # '/home/user/test.db'Kann auch in Form von angegeben werden
target_table_name = 'students'
import_table_name = 'students.csv' # '/home/user/students.csv'Kann in Form von angegeben werden
is_create_table = True
is_header_skip = True
#################################
#######↓ Tabelle DDL für Importziel erstellen ↓#######
sql_script = """
create table students(
id integer,
name text,
class text,
blood_type text
);
"""
#######################################
Alles was Sie tun müssen, ist es normal zu starten
kick.sh
$ python import_data_to_sqlite.py
Das ist es.
Recommended Posts