#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. Спасибо за помощь!