我正在使用sqlite数据库在Pandas和Sqlalchemy的帮助下开发解析器。我正在读取文件并将值分配到列中。
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
创建数据库的方法import sqlalchemy
from sqlalchemy import create_engine
engine = create_engine('sqlite:///dab.sqlite', echo=True)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
from sqlalchemy import Column, Integer, String, Numeric, Float
class parser(Base):
__tablename__ = 'parser'
id = Column(Integer, primary_key=True)
elem = Column(String)
index = Column(Integer)
E = Column(Numeric)
J = Column(Float)
label = Column(String)
glande = Column(Numeric)
parser.__table__
Base.metadata.create_all(engine)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
正如您所看到的,我甚至没有名为0级的列。 请帮忙。 我没有在pandas中使用id列,因为sqlite会自动插入主键的值。 我想要的只是将数据框中的数据插入到sqlite数据库并添加一个可以充当主键的列
答案 0 :(得分:3)
问题在于您已有的索引列。 Pandas尝试将数据帧的索引作为列'索引'插入,但由于已经有一个名为'index'的列,它使用下一个选项,即'level_0'。但是当您附加到表格时,此列不存在。可能这是熊猫中的一个错误,但现在有一些解决方法。
现在可能的解决方法是:
dataFrame.to_sql(...., index=False)
dataFrame.to_sql(...., index_label='id')
to_sql
创建数据库表本身(不附加),然后不需要python中的表定义。