我有一個腳本可以做兩件事: a)它讀取一個csv檔案(銀行交易)並將其填入MySQL資料庫中的一個交易表。 b)根據交易描述對應到對應文件(借記類別、貸記類別等),更新交易表中的其他欄位。
以下是我的腳本
import mysql.connector as msql import pandas as pd from mysql.connector import Error transdata = pd.read_csv('updt_stat.csv', index_col=False, delimiter=',') transdata.fillna(0, inplace=True) transdata = transdata.sort_values('Txn Date') try: conn = msql.connect( host = 'localhost', user = 'root', password = 'root', database = 'npalace' ) if conn.is_connected: cursor = conn.cursor() sql = "SET FOREIGN_KEY_CHECKS=0" cursor.execute(sql) print('Database Connected !') except Error as e: print("Error connecting database", e) for i,row in transdata.iterrows(): sql = "INSERT INTO npalace.t_bank_pnb (txn_no, txn_date, descr, branch_name, cheque_no, \ dr_amount, cr_amount, balance, updated_on) VALUES (%s,STR_TO_DATE(%s,'%d-%m-%Y'),%s,%s,%s,%s,%s,%s,curdate())" cursor.execute(sql, tuple(row)) print('Record Inserted') conn.commit() sql1 = """ UPDATE npalace.t_bank_pnb JOIN npalace.map_pnb ON npalace.map_pnb.descript LIKE CONCAT('%', npalace.t_bank_pnb.descr, '%') SET npalace.t_bank_pnb.dr_category = npalace.map_pnb.dr_cat, npalace.t_bank_pnb.cr_category = npalace.map_pnb.cr_cat, npalace.t_bank_pnb.flat_no = npalace.map_pnb.flat_num WHERE npalace.t_bank_pnb.updated_on = CURDATE() """ cursor.execute(sql1) conn.commit() conn.close() print(cursor.rowcount, "record(s) affected")
當我運行腳本時,第一個腳本 - sql 運行得很完美。然而,第二個腳本沒有運行或表中沒有變化。
我確保資料庫中存在所有相關表。我也已經正確格式化了csv檔案(如果需要,我可以分享它)。
我認為問題可能在第二個查詢的語法上。這個查詢從交易表中取得一個描述字串,並查看它是否有來自另一個映射表的任何子字串。當匹配發生時,它會提取其他欄位並將它們複製回交易表。
請問有人可以幫我找到正確的方法嗎?
提前感謝
好的,經過一番研究,我找到了錯誤。
我的直覺是對的,這是一個腳本錯誤。正確的SQL查詢語句如下:
關鍵是在
WHERE
運算子中包含子字串比較。