使用Python将pandas df导入SQLite

问题描述

我试图遵循pandas和sqlite3文档,但是我不确定是否可以正确设置。

我以这种格式用peewee设置了数据库。我想让stock_id为自动变为1,2,3,4,5,6的数字。当我使用sqlite browser手动添加条目时,它似乎可以正常工作。

class Stocks(Model):
    stock_id = IntegerField(primary_key=True,index=True,unique=True)
    stock_ticker = CharField(max_length = 10,unique=True) 
    stock_name = TextField()
    stock_exchange = TextField()
    stock_ipoDate = DateField()
    stock_delistingDate = DateField()
    stock_status = TextField()

    class Meta:
        database = db

我使用熊猫导入了CSV文件,并将其转换为数据框。现在尝试将它们发送到sqlite“库存”表。

conn = sqlite3.connect('stockmarket.db')
c = conn.cursor()
df.to_sql('stocks',conn,if_exists='replace',index = False)

conn.commit()

现在确定如何使其跳过第一行?我认为它将以与命名相同的方式将事物导入sqlite。就像索引是stock_ticker一样,它将添加到stock_ticker列等中。

这是导入之前表格的外观

enter image description here

这是导入后的外观。它像删除了stock_id列。

enter image description here

我不想重建表格,但是只要不存在库存就更新它并添加新行。除了具有自动生成的唯一stock_id之外,它还可以是另一个表的外键。我尝试将其设置为“更新”而不是“替换”,但这给了我一个错误

sqlite浏览器中,我也看到行的#1到#5。那是我应该用于外键的自动生成的ID吗?

非常感谢任何帮助。

解决方法

最后弄清楚了

https://www.excelcise.org/python-sqlite-insert-data-pandas-data-frame/

conn = sqlite3.connect('stockmarket.db')
c = conn.cursor()

df.to_sql(name='stocks',con=conn,if_exists='append',index=False)

conn.commit()

并自动生成stock_id enter image description here