为了账号安全,请及时绑定邮箱和手机立即绑定

在附加到数据库之前循环数据帧并检查行

在附加到数据库之前循环数据帧并检查行

SMILET 2023-08-03 17:13:16
问题如何将我的数据框附加到数据库,以便它检查 stock_ticker 是否存在,仅附加 stock_ticker 不存在的行?这是我所做的过程将 CSV 文件导入 pandas 数据框指定列名与数据库中的列名相同使用下面的代码将数据帧发送到数据库,但得到sqlite3.IntegrityError: UNIQUE constraint failed: stocks.stock_tickerconn = sqlite3.connect('stockmarket.db')c = conn.cursor()df.to_sql(name='stocks', con=conn, if_exists='append', index=False)conn.commit()我查看了其他完整性错误案例,但似乎找不到适用于附加数据帧的案例?我发现并尝试了这个,但它所做的只是不附加任何内容。try:    conn = sqlite3.connect('stockmarket.db')    c = conn.cursor()    df.to_sql(name='stocks', con=conn, if_exists='append', index=False)    conn.commit()except sqlite3.IntegrityError:    print("Already in database")我不确定我是否正确理解了迭代的事情如何在 Pandas 中迭代 DataFrame 中的行所以我尝试了这个,但它只是打印出每个数据库中已经存在的内容。即使困难重重,仍有 4 个新股票代码。for index, row in df.iterrows():    try:        conn = sqlite3.connect('stockmarket.db')        c = conn.cursor()        df.to_sql(name='stocks', con=conn, if_exists='append', index=False)        conn.commit()    except sqlite3.IntegrityError:        print("Already in database")数据库看起来像这样
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

看起来发生这种情况是因为 Pandas 不允许声明适当的ON CONFLICT策略,以防万一您尝试将数据附加到具有相同(唯一)主键或违反某些其他 UNIQUEness 约束的表。if_exists仅指整个表本身,而不指每个单独的行。


我认为您已经想出了一个很好的答案,也许稍加修改它就会对您有用:


# After connecting

for i in range(len(df)):

    try:

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

        conn.commit()

    except sqlite3.IntegrityError:

        pass

现在,如果您想在 Pandas 数据中出现较新的值时实际替换该值,并且假设您想替换数据库中的旧值,则这可能是一个问题。在这种情况下,您可能希望将原始 SQL 命令用作字符串,并迭代传递 Pandas 值。例如:


insert_statement = """

INSERT INTO stocks (stock_id,

                    stock_ticker,

                    {other columns})

VALUES (%s, %s, {as many %s as columns})

ON CONFLICT (stock_id) DO UPDATE

    SET {Define which values you will update on conflict}"""

然后你就可以运行


for i in range(len(df)):

    values = tuple(df.iloc[i])

    cursor.execute(insert_statement, values)


查看完整回答
反对 回复 2023-08-03
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信