Pandas csv в sqlite3 — ошибка sqlalchemy dtype ValueError

#python #sqlite #pandas

#python #sqlite #pandas

Вопрос:

Я пытаюсь установить dtypes для столбцов в таблице, которые будут вставлены в файл sqlite. Я новичок в sqlalchemy и не могу понять, как установить dtype для каждого столбца.

ПРИМЕЧАНИЕ: я просто сделал их все ЧИСЛОВЫМИ, чтобы попытаться заставить его работать. Я изменю их на то, какими они должны быть, когда мне будет передано исключение ValueError.

 import pandas
import sqlite3
import sqlalchemy

conn = sqlite3.connect('finances.sqlite')

vang401k = pandas.read_csv('/Google Drive/PF/401k.csv')

dtypes = {
        'CreateDate': sqlalchemy.NUMERIC(),
        'Account': sqlalchemy.NUMERIC(),
        'Contributed': sqlalchemy.NUMERIC(),
        'MonthlyReturns': sqlalchemy.NUMERIC(),
        'Performance': sqlalchemy.NUMERIC(),
        'Totals': sqlalchemy.NUMERIC(),
        'MonthChange': sqlalchemy.NUMERIC(),
        'YTDReturn': sqlalchemy.NUMERIC(),
        'YTDROI': sqlalchemy.NUMERIC()
         }

vang401k.to_sql('vanguard401k', conn, if_exists='replace', index=False, dtype=dtypes)
  

Это вызывает исключение ошибки значения

 ValueError: YTDROI (NUMERIC) not a string
  

Я что-то упустил или у меня неправильный формат для использования sqlalchemy.types?

Также, если я попытаюсь from sqlalchemy.types import String изменить все dtypes на

 dtypes = {
            'CreateDate': String,
            'Account': String, ...
  

Я получаю другое исключение

 ValueError: YTDROI (<class 'sqlalchemy.sql.sqltypes.String'>) not a string
  

Также используется Python 3.5.1, если это что-то меняет

Комментарии:

1. Это странно. Какую версию pandas и sqlachemy вы используете?

2. panda ‘0.18.1’, sqlalchemy ‘1.0.13’

3. хммм, может быть, ему не нравится соединение sqlite с dtypes sqlalchemy вместо conn = sqlite3.connect('finances.sqlite') того, чтобы попробовать conn = create_engine("sqlite:///finances") , что вам тоже нужно сделать from sqlalchemy import create_engine .

4.Кроме того, из документов dtype : dict of column name to SQL type, default None Optional specifying the datatype for columns. The SQL type should be a SQLAlchemy type, or a string for sqlite3 fallback connection. интересна последняя часть о sqllite, но я не уверен, что это значит

5. Ну, я думаю, что это исправлено. Я все еще получаю ошибку при запуске, но я думаю, что это больше связано с моими фактическими данными StatementError: (builtins.ValueError) could not convert string to float: 'Mon Nov 30 2015 21:00:00 GMT-0800 (PST)' , мне нужно выяснить, как запретить Google sheets переходить на это с 2015-12-01 при экспорте в csv. Странно, что мне пришлось открыть его с помощью create_engine, чтобы даже использовать dtype sqlalchemy. Спасибо за помощь!