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

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 operator WHERE.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan