我有几个从头开始编写的python脚本,它们都执行相同的插入。不幸的是,此脚本会导致问题。我无法向自己解释错误信息。互联网上也没有发现任何东西
错误消息
Traceback (most recent call last):
File "./bahncardkk-expo.py", line 249, in <module>
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
File "./bahncardkk-expo.py", line 207, in sqlinsert
mydb.commit()
File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 852, in commit
self._execute_query("COMMIT")
File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 871, in _execute_query
self.cmd_query(query)
File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 490, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 404, in _handle_result
columns[i] = self._protocol.parse_column(
File "/usr/local/lib/python3.8/dist-packages/mysql/connector/protocol.py", line 249, in parse_column
raise errors.InterfaceError("Failed parsing column information")
mysql.connector.errors.InterfaceError: Failed parsing column information
Skript(错误在中间开始,在埃森)“Buubun GGSKON HABEN -Z.B.”):#!/usr/bin/python3
from selenium import webdriver
from seleniumrequests import Firefox
from time import sleep
from datetime import datetime
import mysql.connector
import requests
import struct
import random
#baue verbindung mit DK-Datenbank auf DK-vServer
mydb = mysql.connector.connect(
host="localhost",
user="user",
password="forget",
database="gnucash",
buffered=True
)
sqlcursor = mydb.cursor(buffered=True)
new_onlineumsaetze = [['2020-12-12', 'FRANKFURT', '8.10']['2020-12-15', 'DB FERNVERKEHR AG / FRANKFURT', '2.12']]
#print(new_onlineumsaetze)
# SQL INSERT ---------------------------------------------------------------------------
# ab hier sein alle fehlende Onlineumsätze sie nun in die Gnucash DB gehören
# zuerst aber muss in der Beschreibung nach bestimmte Wörter getriggert werden, damit das Skript weiß welche gegenkonto gebucht werden muss
# dann kommt die def funktion und macht den SQL Insert. (wichtig in python ist die def funktion und der auftrug immer vertauscht!)
def sqlinsert (postaktdatumhms,betrag,nbetrag,GUID,sqldescription):
sleep(1) # sleep wird gebraucht damit keine doppelte also sekunden geaue enter_dates kommen. diese kann zu fehler führen bei abfragen mit Group BY. Daher jeder eintrag eine sekunde unterschiede.
# und einige Zufallsvariabeln erstellt werden
idkey1 = ("ffffdf1000000000000000"+("%5.0f"%(random.uniform(10000,18000)))+("%5.0f"%(random.uniform(10000,19000))))
idkey2 = ("ffffdf2000000000000000"+("%5.0f"%(random.uniform(10000,19000)))+("%5.0f"%(random.uniform(10000,19000))))
idkeyt = ("ffffdfd000000000000000"+("%5.0f"%(random.uniform(10000,20000)))+("%5.0f"%(random.uniform(10000,19000))))
idzufk = ("%5.0f"%(random.uniform(10000,22000)))
aktdatum = datetime.now().strftime("%Y%m%d")
enteraktdatumhms = datetime.now().strftime("%Y%m%d%H%M%S")
# Abbuchungskonto SOLL - Bahncard Kreditkart
sqlcursor.execute("""
INSERT INTO `gnucash`.`splits` (`guid` , `tx_guid`, `account_guid` , `memo`, `action`, `reconcile_state`, `reconcile_date` , `value_num`, `value_denom`, `quantity_num`, `quantity_denom`)
VALUES (%s ,%s ,'3a91ecde057dcf3c00f33219b076cfdc', ' ' , ' ' , 'n' , '1970-01-01 00:00:00', %s , '100' , %s , '100');
""",(idkey1,idkeyt,nbetrag,nbetrag))
mydb.commit()
# Zubuchungskonto HABEN - z.B. Essen
sqlcursor.execute("""
INSERT INTO `gnucash`.`splits` (`guid` , `tx_guid`, `account_guid` , `memo`, `action`, `reconcile_state`, `reconcile_date` , `value_num`, `value_denom`, `quantity_num`, `quantity_denom`)
VALUES (%s , %s , %s , ' ' , ' ' , 'n' , '1970-01-01 00:00:00', %s , '100' , %s , '100');
""",(idkey2,idkeyt,GUID,betrag,betrag))
mydb.commit()
# Transaktions ID (verbindet die zwei oberen zur einer Transaktions mitereinander) und wann
sqlcursor.execute("""
INSERT INTO `gnucash`.`slots` (`id` , `obj_guid`, `name` , `slot_type`, `int64_val`, `timespec_val` , `numeric_val_num`, `numeric_val_denom`, `gdate_val`)
VALUES ( %s , %s , 'date-posted', '10' , '0' , '1970-01-01 00:00:00', '0' , '1' , %s );
""",(idzufk,idkeyt,aktdatum))
mydb.commit()
# Transaktionsbeschreibung sowie enter_date und Datum wann das geeschäfts statt fand
sqlcursor.execute("""
INSERT INTO `gnucash`.`transactions` (`guid` , `currency_guid` , `num`, `post_date`, `enter_date`, `description`)
VALUES ( %s , 'bc59ea336e0e432d98568cc5ba4a5e5b', ' ' , %s , %s , %s );
""",(idkeyt,postaktdatumhms,enteraktdatumhms,sqldescription))
mydb.commit()
# hole die Zeilen raus die noch in der gnucashdb fehlend und suche nach trigger wonach dann das jeweilige buchungskonto an die sql insert funktion übergeben wird
print("falls Sätze fehlen printe folgende Datensätze und werden eingefügt:")
for row in new_onlineumsaetze:
print(row)
postaktdatumhms = row[0]
betrag = (str(row[2])).replace(".","")
nbetrag = (str("%.2f" %(float((-1))*(float(row[2])))).replace(".",""))
#PAYPAL speziell wegen Liquitätsswap (KK über P2 zu P1)
if any(wort in row[1] for wort in ['PAYPAL *dario.koceic / 35314369001']):
GUID = "d989b2450db541a8baa545c4f0e3097a" #PayPal2 dario.koceic
sqldescription = "auto von KK über P1 zu P2 - ACHTUNG Löschen, manuell eintrag noch nicht funktionfährig!!! <----"
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
#PAYPAL speziell wegen Liquitätsswap (KK über P1 zu P2)
elif any(wort in row[1] for wort in ['PAYPAL *d.koceic / 35314369001']):
GUID = "3c84c0329ef0451e812711fac616b721" #PayPal1 d.koceic
sqldescription = "auto von KK über P2 zu P1 - ACHTUNG Löschen, manuell eintrag noch nicht funktionfährig!!! <----"
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
# WICHTIG PaylPal muss vor Freizeit1 kommen!
#Essen und Lebensmittel
elif any(wort in row[1] for wort in ['ckerei Wimmer','Lidl','Aldi','MUELLER', 'Netto', 'BACKHAUS', 'Rossmann', 'EDEKA','MCDONALD','VINZENZ','YORMAS','Lekkerland','Elvetino AG','HEIGLBECK','DB FERNVERKEHR AG','DB FERNVERKEHR AG / FRANKFURT','OMV 7225 / Poing','NEUKAUF INGOLSTADT DON','BackWerk','RUBENBAUER','Autobahnrasthaus Hoch','NEWREST','STUDENAC','VICTA','TOMMY','DM - DROGERIE MARKT','Burger King','REWE']):
GUID = "eeafa371f8e44351b7f064706615db9c"
sqldescription = row[1]
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
#Freizeit, Luxus und co.
elif any(wort in row[1] for wort in ['Amazon.de', 'AMZN Mk', 'AMZN', 'Hornbach','Globus','MAERKLIN','Saturn','Geocaching','BAUHAUS','www.real.de','IBIS BUDGET','PAYPAL', 'ALIEXPRESS']):
GUID = "03bcb39b7f3c4033a359dd98a683f8cf"
sqldescription = row[1]
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
#Fahrkarten und Transport
elif any(wort in row[1] for wort in ['DB BAHN A-NR','UBER','Flixbus','TIER']):
GUID = "d45539b2745f4f87a013ab953ef26af2"
sqldescription = row[1]
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
#Kleidung und Frisur
elif any(wort in row[1] for wort in ['PRIMARK','GALERIA KAUFHOF',' C & A','Siemes Schuhcenter']):
GUID = "fbe15d0b9440448a963a357e23e6a087"
sqldescription = row[1]
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
#Finanzendienstleistungen, Auslandentg. und Zinsaufw.
elif any(wort in row[1] for wort in ['1.50% AUSLANDSEINSATZENTGELT']):
GUID = "3d9e3838b66a40dab3d3b5428bc93ccf"
sqldescription = row[1]
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
#Bildung und Literatur
elif any(wort in row[1] for wort in ['AUDIBLE','Audible Gmbh']):
GUID = "64e20118bf7640e4952c4822c185b46d"
sqldescription = row[1]
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription)
# wenn alles nicht passt dann AUSGLEICHSKONTO
else:
GUID = "21b0142e39ff42d6a0979361ce7a8da5"
sqldescription = row[1] + " +++ NICHT ZUORDBARER BUCHUNGSEINTRAG +++ bitte manuell aendern! <---- <---- <----"
sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
mydb.close()
目前没有回答
相关问题 更多 >
编程相关推荐