Cara untuk menjalankan 2 pertanyaan dalam MySQL secara berurutan: menggunakan cursor.execute
P粉952365143
P粉952365143 2023-09-08 17:51:12
0
1
417

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粉952365143
P粉952365143

membalas semua (1)
P粉403821740

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 operatorWHERE.

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!