【发布时间】:2020-06-16 19:16:37
【问题描述】:
我想将 pandas 数据框插入到我使用 SQL alchemy 预先创建的 sqltable 中。
但是,这样做我会得到重复,因为 SQLite 有一个索引列,当我从数据框中复制时,它会采用不同的索引,即使数据相同,它也可能会附加它。
关于我的状态的详细信息:
我的 pandas 数据框在插入时没有索引。 (index=False) 即使索引是主键,重要的是剩余数据。数据行不得重复,例如每列具有相同的内容组合。
My SQL alchemy 创建表:(来自 database.py)
class SQLTable(Base):
__tablename__ = 'sqltable'
__table_args__ = {'sqlite_autoincrement': True}
index = Column(Integer, primary_key= True, nullable=False)
A = Column(Integer, nullable=True)
B = Column(String, nullable=True)
C = Column(BigInteger, nullable=True)
D = Column(Integer, nullable=True)
E = Column(String, nullable=True)
F = Column(Float, nullable=True)
但是,如果索引以外的行不存在,我只希望插入到 sqltable 中。 我找到了python-pandas-tosql-only-insert-new-rows,但我不知道如何将其应用于我的数据。
df.to_sql(
name="sqltable",
con=engine,
if_exists='replace',
index=False,
dtype={
'index': sqlalchemy.types.INTEGER(),
'A': sqlalchemy.types.INTEGER(),
'B': sqlalchemy.types.VARCHAR(length=255),
'C': sqlalchemy.types.BIGINT(),
'D': sqlalchemy.types.VARCHAR(length=255),
'E': sqlalchemy.types.VARCHAR(length=255),
'F': sqlalchemy.types.Float(precision=3, asdecimal=True)
}
)
如何进行索引? 最好的方法是什么?
向 SQL 表插入新行的在线教程
【问题讨论】:
-
你试过没有 table_args = {'sqlite_autoincrement': True} 吗?它会总是自动增加您的索引请参阅:stackoverflow.com/questions/4567574/…。我认为这不是您想要的行为。
-
您的笑脸数据有多大?就我个人而言,我会使用存储过程并使用哈希函数来仅引入增量,但我认为您不能在 SQL 中使用存储过程?将在下面添加熊猫解决方案
标签: python python-3.x pandas sqlite pandasql