Rumah > Soal Jawab > teks badan
Saya mempunyai skrip yang melakukan dua perkara: a) Ia membaca fail csv (urus niaga bank) dan mengisinya ke dalam jadual transaksi dalam pangkalan data MySQL. b) Kemas kini lajur lain dalam jadual transaksi mengikut perihalan transaksi yang dipetakan ke fail pemetaan (kategori debit, kategori kredit, dll.).
Berikut ialah skrip saya
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")
Apabila saya menjalankan skrip, skrip pertama - sql berjalan dengan sempurna. Walau bagaimanapun, skrip kedua tidak berjalan atau tiada perubahan dalam jadual.
Saya memastikan semua jadual yang berkaitan wujud dalam pangkalan data. Saya juga telah memformat fail csv dengan betul (saya boleh berkongsinya jika perlu).
Saya rasa masalahnya mungkin dalam sintaks pertanyaan kedua. Pertanyaan ini mengambil rentetan penerangan daripada jadual urus niaga dan melihat sama ada ia mempunyai sebarang subrentetan daripada jadual pemetaan lain. Apabila padanan berlaku, ia mengekstrak medan lain dan menyalinnya kembali ke jadual transaksi.
Bolehkah seseorang membantu saya mencari kaedah yang betul?
Terima kasih terlebih dahulu
P粉4038217402023-09-09 16:12:15
Baiklah, selepas beberapa kajian, saya mendapati ralatnya.
Perasaan saya betul, ia adalah kesilapan skrip. Pernyataan pertanyaan SQL yang betul adalah seperti berikut:
sql1 = """ UPDATE npalace.t_bank_pnb JOIN npalace.map_pnb 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() AND npalace.t_bank_pnb.descr LIKE CONCAT('%', npalace.map_pnb.descript, '%') """
Kuncinya ialah memasukkan perbandingan subrentetan dalam operator WHERE
.