CSV / EXCEL для SQLite в Python - PullRequest
0 голосов
/ 16 октября 2019

На веб-сайте http://converttosqlite.com/convert/

он имеет в качестве входных данных: файл CSV, представляющий таблицу. Первая строка таблицы представляет имя столбцов.

В качестве вывода она выводит: БД SQLite с таблицей

Я обновил в python. Теперь есть папка с несколькими таблицами. Каждый файл в папке представляет собой таблицу. Каждая таблица разделена '\n' и '\t' Первая строка каждой таблицы представляет собой имя столбцов. И я добавил, что вторая строка представляет тип данных столбцов.

#------- imports--------------
import sqlite3
from sqlite3 import Error
import os

#-------DEFs--------------
def create_connection(db_file):
    """ create a database connection to a SQLite database """
    conn = None
    try:
        return sqlite3.connect(db_file)
    except Error as e:
        print(e)
    finally:
        if conn:
            conn.close()

def create_table(conn,table_filename):
  table_name = table_filename.split('/')[-1]
  conn.execute('DROP TABLE IF EXISTS '+table_name)

  # get mat table from file
  table = fileText_to_mat(table_filename)

  # table size
  len_col = len(table[0])
  len_rows = len(table)

  #------CREATE TABLE-----------------------
  sql_create ='CREATE TABLE '+table_name+'(' 
  for id_col in range(len_col):
    sql_create +=str(table[0][id_col])+' '+str(table[1][id_col])+','
  sql_create = sql_create[0:-1]+'); '
  print(sql_create)
  conn.execute(sql_create)

  #------INSERT INTO TABLE-----------------------
  sql_insert ='INSERT INTO '+table_name+'(' 
  for id_col in range(len_col):
    sql_insert +=str(table[0][id_col])+','
  sql_insert = sql_insert[0:-1]+') VALUES'

  for id_row in range(2,len_rows):
    sql_insert += ' ('
    for id_col in range(len_col):
      sql_insert +="'"+str(table[id_row][id_col])+"',"
    sql_insert = sql_insert[0:-1]+'),'
  sql_insert = sql_insert[0:-1]+';'
  #print(sql_insert)
  conn.execute(sql_insert)

  #------COMMIT-----------------------
  conn.commit()
  conn.close()
  print('fim')


def fileText_to_mat(table_filename):
  table = [i.strip('\n').split('\t') for i in open(table_filename)]
  return table

def folder_full_to_arrayString(folder_name):
  return [os.path.join(folder_name, f) for f in os.listdir(folder_name)]


#-------Main--------------
# create file python
name_file_python = 'sqlite.db'
conn = create_connection(name_file_python)

# get tables in folder_tables
name_folder = 'folder_tables'
list_tables = folder_full_to_arrayString(name_folder)
print(list_tables)

# For Each File_table. Create a table
for table in list_tables:
  create_table(conn,table)

Вопрос:

что вы думаете об этом решении кода?

какие библиотеки Python я использовал, что делает это решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...