我必須用 CSV 檔案更新資料庫。考慮資料庫表如下所示:

CSV 檔案資料如下所示:

如您所見,CSV 檔案資料修改了一些資料并添加了一些新記錄,我應該做的是僅更新已修改的資料或添加的一些新記錄。
在 Table2 中,col2 的第一條記錄被修改。我只需要更新 col2(即 AA)的第一條記錄,而不是 col2 的全部記錄。
我可以通過硬編碼來做到這一點,但我不想通過硬編碼來做到這一點,因為我需要用 2000 個表來做到這一點。
誰能建議我實作目標的步驟。
這是我的代碼片段..
df = pd.read_csv('F:\\filename.csv', sep=",", header=0, dtype=str)
sql_query2 = engine.execute('''
SELECT
*
FROM ttcmcs023111temp
''')
df2 = pd.DataFrame(sql_query2)
df.update(df2)
uj5u.com熱心網友回復:
由于我沒有與您相似的資料,所以我使用了自己的資料庫。我的書籍表的架構如下:
-------- ------------- ------ ----- --------- -------
| Field | Type | Null | Key | Default | Extra |
-------- ------------- ------ ----- --------- -------
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | NO | | NULL | |
| author | char(30) | NO | | NULL | |
-------- ------------- ------ ----- --------- -------
該表如下所示:
---- -------------------- ------------------
| id | name | author |
---- -------------------- ------------------
| 1 | Origin | Dan Brown |
| 2 | River God | Wilbur Smith |
| 3 | Chromosome 6 | Robin Cook |
| 4 | Where Eagles Dare | Alistair Maclean |
| 5 | The Seventh Scroll | Dan Brown | ### Added wrong entry to prove
---- -------------------- ------------------ ### my point
因此,我的方法是使用 python 創建一個與 CSV 中的書籍表具有相同架構的新臨時表。我使用的代碼如下:
sql_query = sqlalchemy.text("CREATE TABLE temp (id int primary key, name varchar(30) not null, author varchar(30) not null)")
result = db_connection.execute(sql_query)
csv_df.to_sql('temp', con = db_connection, index = False, if_exists = 'append')
它創建了一個這樣的表:
---- -------------------- ------------------
| id | name | author |
---- -------------------- ------------------
| 1 | Origin | Dan Brown |
| 2 | River God | Wilbur Smith |
| 3 | Chromosome 6 | Robin Cook |
| 4 | Where Eagles Dare | Alistair Maclean |
| 5 | The Seventh Scroll | Wilbur Smith |
---- -------------------- ------------------
現在,您只需要update在 MySQL 中使用 usingINNER JOIN來更新您要在原始表中更新的值。(就我而言,“書籍”)。
以下是您將如何執行此操作:
statement = '''update books b
inner join temp t
on t.id = b.id
set b.name = t.name,
b.author = t.author;
'''
db_connection.execute(statement)
此查詢將從我使用 CSV 創建books的表temp中更新表中的值。
您可以temp在更新值后銷毀表。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/380045.html
標籤:Python sql sql-server 文件处理
