gpt4 book ai didi

python - 将数据帧附加到 sqlite3 表,BLOB 而不是时间戳

转载 作者:行者123 更新时间:2023-12-01 07:06:07 24 4
gpt4 key购买 nike

我正在尝试将 pandas 数据帧中的数据附加到 SQLite 数据库中的现有表中。在此过程之后,当我尝试使用资源管理器查看数据时,它显示为 BLOB。当我尝试从数据库读取 pandas 时,出现错误:

Execution failed on sql 'select * from bnffut order by timestamp DESC limit 80000': not enough values to unpack (expected 2, got 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 而是时间戳本身?

编辑

我已经找到了解决我的特定问题的方法。

数据类型对于 sqlite3 列来说太长,我将时间戳列更改为:

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

现在它显示了正确的日期时间并且选择不是问题。

最佳答案

如果您能够使用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,但从文档来看它看起来很相似。

关于python - 将数据帧附加到 sqlite3 表,BLOB 而不是时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com