Heim  >  Fragen und Antworten  >  Hauptteil

Möglichkeit, zwei Abfragen in MySQL nacheinander auszuführen: mit Cursor.execute

Ich habe ein Skript, das zwei Dinge tut: a) Es liest eine CSV-Datei (Banktransaktionen) und füllt sie in eine Transaktionstabelle in einer MySQL-Datenbank. b) Aktualisieren Sie andere Spalten in der Transaktionstabelle entsprechend der der Zuordnungsdatei zugeordneten Transaktionsbeschreibung (Belastungskategorie, Kreditkategorie usw.).

Das Folgende ist mein Skript

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")

Wenn ich das Skript ausführe, läuft das erste Skript – SQL – perfekt. Das zweite Skript wird jedoch nicht ausgeführt oder es gibt keine Änderungen in der Tabelle.

Ich habe sichergestellt, dass alle relevanten Tabellen in der Datenbank vorhanden sind. Ich habe auch die CSV-Datei korrekt formatiert (ich kann sie bei Bedarf teilen).

Ich denke, das Problem könnte in der Syntax der zweiten Abfrage liegen. Diese Abfrage entnimmt eine Beschreibungszeichenfolge aus der Transaktionstabelle und prüft, ob sie Teilzeichenfolgen aus einer anderen Zuordnungstabelle enthält. Wenn eine Übereinstimmung auftritt, werden die anderen Felder extrahiert und zurück in die Transaktionstabelle kopiert.

Kann mir bitte jemand helfen, die richtige Methode zu finden?

Vielen Dank im Voraus

P粉952365143P粉952365143377 Tage vor456

Antworte allen(1)Ich werde antworten

  • P粉403821740

    P粉4038217402023-09-09 16:12:15

    好的,经过一番研究,我找到了错误。

    我的直觉是对的,这是一个脚本错误。正确的SQL查询语句如下:

    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, '%')
    """

    关键是在WHERE操作符中包含子字符串比较。

    Antwort
    0
  • StornierenAntwort