代码之家  ›  专栏  ›  技术社区  ›  Sid

python-将数据帧追加到sqlite3表中,是BLOB而不是timestamp?

  •  0
  • Sid  · 技术社区  · 6 年前

    我试图将数据从大熊猫数据文件追加到SQLite数据库中的现有表中。在我尝试使用资源管理器查看数据的过程之后,它显示为 BLOB . 当我试图从数据库中读取pandas时,会得到错误信息:

    将数据帧读入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表以确保它不是 团块 但时间戳本身呢?

    -----编辑-----

    我已经找到了解决我特殊问题的办法。

    对于sqlite3列,dtype太长,我将timestamp列更改为:

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

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

    0 回复  |  直到 6 年前
        1
  •  1
  •   Umar.H    6 年前

    如果你能使用 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。