当没有此类命名列时,SQLite give column not found错误

2024-10-02 10:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Pandas和Sqlalchemy的帮助下使用sqlite数据库开发解析器。我正在从文件中读取并将值分配到列中。在

dataFrame = pd.read_fwf('gf1401.gam',colspecs=colspaces,skiprows=37,nrows=1764)
dataFrame.columns=['elem','index','E','J','label','glande']
dataFrame['glande']=dataFrame['glande'].map(lambda x: '%1.3f' % x)
print dataFrame.head()
engine = create_engine('sqlite:///dab.sqlite')
conn = engine.raw_connection()
dataFrame.to_sql(name='parser', con=conn, if_exists='append')

最后一行给出了一个奇怪的错误 sqlite3.OperationalError: table parser has no column named level_0

这就是我如何使用sqlalchemy创建数据库的方法

^{pr2}$

如您所见,我甚至没有一个名为level0的列。 请帮忙。 我没有在pandas中使用id列,因为sqlite会自动为主键插入值。 我只想将数据帧中的数据插入到sqlite数据库中,并添加一个列作为主键


Tags: 数据数据库parser解析器dataframepandasreadsqlite
1条回答
网友
1楼 · 发布于 2024-10-02 10:26:52

问题在于您已经拥有的索引列。Pandas尝试将dataframe的索引作为列“index”插入,但由于已经有一个名为“index”的列,因此它使用下一个选项,即“level_0”。但当您追加到表中时,此列不存在。这可能是熊猫身上的一个虫子,但现在有一些解决办法。在

目前可能的解决办法是:

  • 指定不插入数据帧的索引:dataFrame.to_sql(...., index=False)
  • 指定应该在其中插入索引的列名(如果需要的话):dataFrame.to_sql(...., index_label='id')
  • 或者您可以让to_sql创建数据库表本身(不追加),那么就不需要用python定义表了。在

相关问题 更多 >

    热门问题