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

问题如何将我的数据框附加到数据库,以便它检查 stock_ticker 是否存在,仅附加 stock_ticker 不存在的行?

这是我所做的过程

  1. 将 CSV 文件导入 pandas 数据框

  2. 指定列名与数据库中的列名相同

  3. 使用下面的代码将数据帧发送到数据库,但得到

sqlite3.IntegrityError: UNIQUE constraint failed: stocks.stock_ticker

conn = 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")

https://img4.mukewang.com/64cb6fd400018be907490345.jpg

数据库看起来像这样

https://img2.mukewang.com/64cb6fe30001ce7507510330.jpg

SMILET
浏览 97回答 1
1回答

Helenr

看起来发生这种情况是因为 Pandas 不允许声明适当的ON CONFLICT策略,以防万一您尝试将数据附加到具有相同(唯一)主键或违反某些其他 UNIQUEness 约束的表。if_exists仅指整个表本身,而不指每个单独的行。我认为您已经想出了一个很好的答案,也许稍加修改它就会对您有用:# After connectingfor 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python