亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在附加到數據庫之前循環數據幀并檢查行

在附加到數據庫之前循環數據幀并檢查行

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條經驗 獲得超4個贊

看起來發生這種情況是因為 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 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號