Импортируйте данные из pandas в таблицу MS Access с помощью python - PullRequest
0 голосов
/ 17 сентября 2018

Я довольно новичок в python и пытаюсь внедрить некоторую автоматизацию для моей работы.В настоящее время я пытаюсь обновить таблицу доступа с данными из CSV через Python.До сих пор я считал CSV в кадр данных pandas и пытаюсь добавлять строки по одной в Access.Это то, что у меня есть:

import pandas as pd
import pypyodbc
import glob

df = pd.read_csv("data.csv", header = 0, low_memory = False)
df = df[['Description','SN','Attribute_1','Attribute_2',\
    'Attribute_3','Attribute_4','Cost','Date']]

con = pypyodbc.connect('DRIVER={Microsoft Access Driver \ 
(*.mdb)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;\
PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;FIL=MS\
Access;DriverId=25;DefaultDir= \ 
C:/Users/testuser/Documents;DBQ=C:/Users/testuser/ \ 
Documents/Python/test.mdb;')

cursor = con.cursor()

for row in df.iterrows():
    cursor.execute("INSERT INTO test.table1([Description],[SN], 
      [Attribute_1], [Attribute_2],[[Attribute_3],[Attribute_4],\
      [Cost],[Date]) values (?,?,?,?,?,?,?,?)", (row[0], row[1] ,\
      row[2], row[3], row[4], row[5], row[6], row[7]))
    con.commit()
cursor.close()
con.close()

Всякий раз, когда я запускаю это, я получаю сообщение об ошибке

IndexError: tuple index out of range

Я искал типичную причину этого, котораяСчитается, что индексация неправильная (т. е. начинается с 1 вместо 0 с Python), и гарантируется, что я начал с 0 индекса.

Я также посмотрел везде, где могу найти документацию о том, как работает команда cursor.execute, но я все еще в замешательстве и не уверен, что у меня есть правильный синтаксис для этого оператора.Любая помощь будет оценена!

Пример данных:

Description   SN      Attr_1    Attr_2  Attr_3  Attr_4  Cost    Date
type_a      12938475  shiney    black    hard     a     1.09   7/20/18
type_b      18293940  matt      silver   soft     b     0.56   7/20/2018
type_d      18283940  matt      gray     soft     c     0.78   7/16/2018
type_a      18944938  shiney    silver   medium   d     3.4    7/18/2018
type_a      17485003  matt      silver   hard     v     2.3    7/17/2018

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Хорошо, так что, вероятно, вы выполняете некоторую аналитику в Python, сохраняете результаты как CSV, и вы хотите импортировать их, потому что у вас есть какой-то уникальный идентификатор, который вы отображаете, верно. Просто сделай это.

  DoCmd.TransferText acImportDelim, "", "Table1", "C:\your_path\testing.csv", True, ""
' where table1 is your table

Я не думаю, что это немного сложнее, чем это. Отпишитесь, если я упустил суть, а вы на самом деле пытаетесь сделать что-то еще.

0 голосов
/ 17 сентября 2018

"Я рассмотрел типичную причину этого, которая называется неправильным индексированием (т. Е. Начиная с 1 вместо 0 с python), и убедилась, что я начала с 0 индекса."

Это также вызвано тем, что вы превысили ожидаемые данные или когда достигли конца файла.

Например

>>t = (1,2,3)
>>t(2)
3
>>t(3)
IndexError: tuple index out of range

Пожалуйста, проверьте это. Кроме того, если это не помогает, загрузите «data.csv» на свой диск и отправьте ссылку для совместного использования, чтобы мы могли запустить код и протестировать его.

...