Добавление данных в таблицу sqlite3, BLOB вместо метки времени? - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь добавить данные из фрейма данных pandas в существующую таблицу в sqlite db. После процесса, когда я пытаюсь просмотреть данные с помощью проводника, он отображается как BLOB. Когда я пытаюсь прочитать данные из базы данных в pandas, я получаю сообщение об ошибке:

Не удалось выполнить на sql 'select * from bnffut порядок по метке времени DESC limit 80000': недостаточно значений для распаковки (ожидается 2,получил 1)

Считать фрейм данных в таблицу sqlite:

# the dtype of timestamp column is datetime64[ns]
query = 'insert or replace into bnffut (timestamp,close,bid,ask) values (?,?,?,?)'
conn.executemany(query, df.to_records(index=False))
conn.commit()

Затем я пытаюсь прочитать его в фрейм данных:

select_statement = 'select * from '+ 'bnf' +'fut order by timestamp DESC limit 80000'
m1df = pd.read_sql(select_statement, conn)

1 - Какдобавить данные в таблицу sqlite, чтобы убедиться, что это не BLOB, а сама отметка времени?

TIA

----- EDIT -----

Я нашел решение моей конкретной проблемы.

dtype слишком длинный для столбца sqlite3, я изменил столбец отметки времени на:

df['timestamp'] = df['timestamp'].astype(str)

и теперь он показываетправильная дата и время не являются проблемой.

1 Ответ

1 голос
/ 17 октября 2019

если вы можете использовать sqlalchemy, тогда вы сможете воспользоваться .types классом

, например:

from sqlalchemy.types import INTEGER, NVARCHAR, DATETIME
# on the assumption you have 3 columns, col_str, col_int, col_date
data_types_dict = {'col_str' : NVARCHAR,
                   'col_int' : INTEGER,
                   'col_date' : DATETIME}
# assuming you have your connection defined as engine
df.to_sql(con=engine,dtypes=data_types_dict,index=False,schema='dim',if_exists='append')

при печати вашего диктата

print(data_types_dict)
{'col_str': <class 'sqlalchemy.sql.sqltypes.NVARCHAR'>, 
'col_int': <class 'sqlalchemy.sql.sqltypes.INTEGER'>, 
'col_date': <class 'sqlalchemy.sql.sqltypes.DATETIME'>}

Подробнее о SQL Alchemy и SQL lite читайте здесь: https://docs.sqlalchemy.org/en/13/dialects/sqlite.html

Лично я использовал только postgres и sql-server, но из документов это выглядит v.similair.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...