cari

Rumah  >  Soal Jawab  >  teks badan

Cara untuk menjalankan 2 pertanyaan dalam MySQL secara berurutan: menggunakan cursor.execute

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粉952365143P粉952365143444 hari yang lalu508

membalas semua(1)saya akan balas

  • P粉403821740

    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.

    balas
    0
  • Batalbalas