Forum: PC-Programmierung Python count nach MySQL Ergebnis


von Seb (Gast)


Lesenswert?

Hallo,

folgendes. Ich versuche gerade in Python 3.5.1 eine Textdatei mit Kunden 
User ID's zu importieren und diese anschließend Kunde für Kunde zu 
bearbeiten/analysieren.

Erstmal das ganze Script hierzu:
1
import codecs
2
import pymysql
3
from lib2to3.btm_utils import tokens
4
from tkinter.filedialog import askopenfilename
5
from tkinter import Tk
6
root = Tk()
7
root.withdraw()
8
9
name = askopenfilename(filetypes =(("Import File", "*.txt"),("All Files","*.*")),
10
                       title = ""
11
                       )
12
f = codecs.open(name, encoding='utf-8')
13
14
file_names = []
15
for uid in f:
16
    uid = uid.strip()
17
    if ',' in uid:
18
        for f in uid.split(','):
19
            file_names.append(f)
20
    else:
21
        file_names.append(uid)
22
count = 0       
23
for uid in file_names:
24
    print(uid)
25
    print("open MysQL")
26
    db = pymysql.connect(---My Database login---)
27
    
28
    cursor = db.cursor()
29
    
30
    print("start Query")
31
    cursor.execute(---My Databse Query---)
32
    
33
    data = cursor.fetchall()
34
    for row in data:
35
        result1= row[0]
36
        result2 = row[1]
37
        result3 = row[2]
38
        # and some more results
39
    print("close MYSQL")
40
    db.close()
41
    print (result1, result2, result3)
42
    
43
    #do something with MySQL result
44
         
45
count += 1
46
        
47
print ("end of file")

Nach dem Import der Textdatei steht eine printausgabe zur Überprüfung, 
hier werden auch immer die richtigen ID's angezeigt.
1
print(uid)

Etwas weiter unten eine weitere Überprüfung
1
print (result1, result2, result3)

Hier werden mir nur noch die Werte aus der ersten ID aus der 
importierten Liste angezeigt.

Ich komme gerade nicht dahinter wo ich den Fehler eingebaut habe.

Wäre nett, wenn mir jemand das kurz zeigen könnte was ich falsch mache.

von mmm (Gast)


Lesenswert?

Ich würde mal sagen, es liegt an der streng geheimen Query.
BTW: Warum baust Du die Datenbankverbindung jedes mal neu auf und zu?

von HeikoG (Gast)


Lesenswert?

Was erwartest du denn was passieren soll?

    data = cursor.fetchall()
-> holt alle Datensätze der Query
    for row in data:
-> eine Schleife über alle Datensätze
        result1= row[0]
        result2 = row[1]
        result3 = row[2]
-> die ersten drei Spalten jedes Datensatzes werden in result1..3 
kopiert
   und überschreiben dabei die Daten des vorigen Datensatzes
        # and some more results
-> Schleife endet hier
    print("close MYSQL")
    db.close()
-> Datenbank-Vernindung wird geschlossen
    print (result1, result2, result3)
-> die Daten des letzten Datensatzes werden ausgegeben

von Seb (Gast)


Lesenswert?

An der Query liegt es nicht. Zum besser lesen, habe ich die Query 
formatiert hier eingefügt und nicht in einer Zeile.
1
"
2
SELECT
3
    a.us_id,
4
    a.username,
5
    a.email
6
  
7
FROM accounts a 
8
 
9
WHERE a.us_id IN
10
(
11
"
12
+uid+
13
"
14
)
15
GROUP BY 1;
16
"
Und das abfragen der genutzten Query zeigt die richtige User ID an
1
print(cursor._last_executed)


Das öffnen und schließen habe ich noch nicht wieder umgestellt, da ich 
zuerst dachte es liegt daran das ich die Verbindung offen halte. Zum 
testen habe ich die Datenbank nach jedem Kunden wieder zu gemacht.

von Seb (Gast)


Lesenswert?

Habe den Fehler gefunden.
Die eine ID existiert nicht. Da hätte ich einen zahlendreher. Da keine 
Daten vorhanden sind, konnte nichts überschrieben werden und es wurden 
die Daten aus dem vorherigen ID verwendet.

Ich muss somit nach jeder Abfrage die variablen leeren und am besten 
eine exception einbauen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.