2016-12-16 3 views
1

enter image description herepandas.read_csv: OperationalError: таблица не имеет столбца с именем 1

Я пытаюсь загрузить файл CSV в sqllite таблицы на окнах с помощью:

sqllite таблицы и CSV имеют одинаковые имена полей и начать с:

CREATE TABLE test2 (
id INTEGER NOT NULL, 
"case" TEXT, 
...... 
PRIMARY KEY (id), 
UNIQUE ("case") 
) 

у меня есть следующий класс:

class Sqllite_utilities(object): 

    def __init__(self, db_path, table_name): 
     self.db_path = db_path 
     self.table_name = table_name 

    def upload_csv_to_table(self, path_to_csvfile): 
     conn = sqlite3.connect(self.db_path) 
     df = pandas.read_csv(path_to_csvfile) 
     df.to_sql(self.table_name, conn, if_exists='append', index_label='id') 

в командной строке:

s = Sqllite_utilities(settings.SETTINGS_PATH+"\\data.db",'test2') 

In[3]: s.upload_csv_to_table('C:\Users\ne\Desktop\jtest.csv') 
C:\lib\site-packages\pandas\core\generic.py:1201: UserWarning: The spaces in these column names will not be changed. In pandas versions < 0.14, spaces were converted to underscores. 
    chunksize=chunksize, dtype=dtype) 
Traceback (most recent call last): 
    File "C:\lib\site-packages\IPython\core\interactiveshell.py", line 2885, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-3-b530f5199977>", line 1, in <module> 
    s.upload_csv_to_table('C:\Users\dnir\Desktop\jtest.csv') 
    File "F:\ENVS\r2\j1\utilities.py", line 41, in upload_csv_to_table 
    df.to_sql(self.table_name, conn, if_exists='append', index_label='id') 
    File "C:\lib\site-packages\pandas\core\generic.py", line 1201, in to_sql 
    chunksize=chunksize, dtype=dtype) 
    File "C:\lib\site-packages\pandas\io\sql.py", line 470, in to_sql 
    chunksize=chunksize, dtype=dtype) 
    File "C:\lib\site-packages\pandas\io\sql.py", line 1503, in to_sql 
    table.insert(chunksize) 
    File "C:\lib\site-packages\pandas\io\sql.py", line 664, in insert 
    self._execute_insert(conn, keys, chunk_iter) 
    File "C:\lib\site-packages\pandas\io\sql.py", line 1291, in _execute_insert 
    conn.executemany(self.insert_statement(), data_list) 
OperationalError: table test2 has no column named 1 

Что я делаю неправильно?

редактировать: Я думаю, что вы получили его, я получаю новую ошибку, и я буду смотреть на это отдельно:

df.to_sql(self.table_name, conn, if_exists='append', index_label='id') 
File "C:\lib\site-packages\pandas\core\generic.py", line 1201, in to_sql 
    chunksize=chunksize, dtype=dtype) 
File "C:\lib\site-packages\pandas\io\sql.py", line 470, in to_sql 
    chunksize=chunksize, dtype=dtype) 
File "C:\lib\site-packages\pandas\io\sql.py", line 1503, in to_sql 
    table.insert(chunksize) 
File "C:\lib\site-packages\pandas\io\sql.py", line 642, in insert 
    keys, data_list = self.insert_data() 
File "C:\lib\site-packages\pandas\io\sql.py", line 609, in insert_data 
    "duplicate name in index/columns: {0}".format(err)) 
ValueError: duplicate name in index/columns: cannot insert id, already exists 
+0

Стол существует уже, без этого названия столбца? – jeremycg

+0

Да, таблица существует и не имеет столбца «1» – user61629

+0

, поэтому ваши столбцы данных данных pandas должны совпадать с именами столбцов db – jeremycg

ответ

2

Проблема заключается в колонке, панды имеют индекс из dataframe как индекс столбца. Если вы не хотите вставлять записи без него, попробуйте это;

df.to_sql (..., index = False)

Смежные вопросы