ich habe vor ca. 2 Wochen angefangen mich mit Phython bzw. mit dem Programmieren zu beschäftigen.
Die Idee ist eine Datenbank abzufragen, und ein Ergebnis per Mail zu verschicken, falls es ein Ergebnis gibt. Die Abfragen werden in einer xml gespeichert.
Bisher konnte mir google soweit weiterhelfen und es klappt alles solange die Abfrage auch ein Ergebnis liefert! Wenn nicht, bleibt alles hängen.
Hier stehe ich jetzt auf dem schlauch...
mein Code:
Code: Alles auswählen
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=server;'
'Database=dbname;'
'Trusted_Connection=yes;')
import xml.etree.ElementTree as ET
tree = ET.parse('C:\\sql-scripts.xml')
root = tree.getroot()
sqlmessage = ''
count = root[0][0].text
count = int(count)
while count > 0:
select = root[count][0].text
table = root[count][1].text
where = root[count][2].text
error = root[count][3].text
select = "select top 1 ["+select+"] "
table = "from [dbname].[dbo].["+table+"] "
where = "where "+where
sql = select+table+where
cursor = conn.cursor()
cursor.execute(sql)
for row in cursor:
sqlmessage = ''
sqlmessage = sqlmessage + row[0] + ' Error: ' + error
message = ''
print(sqlmessage)
count = count-1
Die XML dazu:
Code: Alles auswählen
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<SQL-Scripts>
<Count>
<Anzahl>2</Anzahl>
</Count>
<Daten>
<Feld>Kundennummer</Feld>
<from>Kunde</from>
<where>name = ''</where>
<error>Name leer</error>
</Daten>
<Daten>
<Feld>Nummer</Feld>
<from>Artikel</from>
<where>Kostentraeger = ''</where>
<error>Kostentraeger leer</error>
</Daten>
</SQL-Scripts>
Sobald aber das SQL-Statement kein Ergebnis liefert, bleibt alles "hängen". Wenn ich das Script dann abbreche erscheint folgendes:
cursor.execute(sql)
KeyboardInterrupt
Das würde ich gerne Abfangen, vor allem sollte auch die Zeile "print(sqlmessage) " nicht ausgeführt werden, wenn das SQL-Ergebnis leer ist.
Hat jemand eine Idee? Leider bin ich mit try nicht weiter gekommen.
Danke & Gruß