Импорт CSV-файлов в базу данных SQL с использованием SQLite в Python

У меня есть 2. TXT-файлы, и я преобразовал их в CSV-файлы, используя https://convertio.co/csv-xlsx/ . Теперь я хотел бы импортировать эти два CSV-файла в две базы данных, используя SQLite в Python (UI – Jupyter Notebook). Эти два файла .csv помечены как person.csv и person_votes.csv . Итак, я сделал это, выполнив приведенный здесь код ( Импорт CSV-файла в таблицу базы данных sqlite3 с использованием Python ):

import sqlite3, csv con = sqlite3.connect(":memory:") cur = con.cursor() cur.execute("CREATE TABLE person (personid STR,age STR,sex STR,primary_voting_address_id STR,state_code STR,state_fips STR,county_name STR,county_fips STR,city STR,zipcode STR, zip4 STR, PRIMARY KEY(personid))") with open('person.csv','r') as person_table: # `with` statement available in 2.5+ # csv.DictReader uses first line in file for column headings by default dr = csv.DictReader(person_table) # comma is default delimiter #personid age sex primary_voting_address_id state_code state_fips county_name county_fips city zipcode zip4 to_db = [(i['personid'], i['age'], i['sex'], i['primary_voting_address_id'], i['state_code'], i['state_flips'], i['county_name'], i['county_fips'], i['city'], i['zipcode'], i['zip4']) for i in dr] cur.executemany("INSERT INTO t (age, sex) VALUES (?, ?);", to_db) con.commit() 

Я не понимаю, почему, когда я пытался выполнить код выше, я продолжаю получать сообщение об ошибке: «KeyError:« personid ». Может ли кто-нибудь помочь?

Кроме того, если я создаю другую таблицу базы данных с именем to_db2 для файла person_votes.csv в том же файле Python, будет ли следующий запрос дать мне все общие элементы между двумя таблицами:

 select ID from to_db, to_db2 WHERE to_db.ID == to_db2 

Ссылка на два .csv-файла выше: https://drive.google.com/open?id=0B-cyvC6eCsyCQThUeEtGcWdBbXc .

3 Solutions collect form web for “Импорт CSV-файлов в базу данных SQL с использованием SQLite в Python”

Это работает для меня в Windows 10, но также должно работать под Linux / Unix. Существует несколько проблем:

  1. Последние две строки person.csv неверны, но это не мешает работе программы. Вы можете исправить это с помощью текстового редактора.
  2. person.csv использует вкладки как разделитель, а не запятые.
  3. В строке есть опечатка (правописание), начинающаяся с «to_db =»
  4. Существует несоответствие количества импортируемых столбцов (2 вместо 11)
  5. Неверное имя таблицы для исполнителей.

Кроме того, я создаю базу данных в файле, а не в памяти. Это достаточно мало, что производительность не должна быть проблемой, и любые изменения, которые вы сделаете, будут сохранены.

Вот мой исправленный файл (вы можете сделать другой стол самостоятельно):

 import sqlite3, csv # con = sqlite3.connect(":memory:") con = sqlite3.connect("person.db") cur = con.cursor() cur.execute("CREATE TABLE person (personid STR,age STR,sex STR,primary_voting_address_id STR,state_code STR,state_fips STR,county_name STR,county_fips STR,city STR,zipcode STR, zip4 STR, PRIMARY KEY(personid))") with open('person.csv','r') as person_table: dr = csv.DictReader(person_table, delimiter='\t') # comma is default delimiter to_db = [(i['personid'], i['age'], i['sex'], i['primary_voting_address_id'], i['state_code'], i['state_fips'], i['county_name'], i['county_fips'], i['city'], i['zipcode'], i['zip4']) for i in dr] cur.executemany("INSERT INTO person VALUES (?,?,?,?,?,?,?,?,?,?,?);", to_db) con.commit() 

Похоже, что вы можете пропустить некоторые имена столбцов в INSERT INTO ...

Вероятно, не очень хорошая практика, оставляя основной ключ как NULL .

Никто не хочет, чтобы мой код попытался понять, почему он терпит неудачу?

Interesting Posts

В python во время выполнения определите, является ли объект экземпляром класса (старый и новый)

Интеграция C и Python: ValueError: функции модуля не могут устанавливать METH_CLASS или METH_STATIC

Как вычислить инверсию кумулятивного дважды нецентрального распределения f в python

Результаты pymysql fetchall () в качестве словаря?

sscanf в Python

Импорт данных и имен переменных из текстового файла в Python

Прочтите USB-устройство чтения карт памяти с Linux? OMNIKEY CardMan 3121 USB

скрытие текстового файла в exe с помощью py2exe / pygame2exe

Локальная переменная, на которую ссылаются перед назначением

Построение исторической коинтеграции Значения между двумя парами

Получение unittest Python приводит к методу tearDown ()

Алгоритм случайного генерирования целочисленных разделов определенной длины в Python?

Асинхронная обработка Django

Как создать набор наборов в Python?

Python конвертировать Excel 2004 xml в csv (или excel)

Python - лучший язык программирования в мире.