Python count nach MySQL Ergebnis

Gast #5208600
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.
Gast #5208628
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
Gast #5208660
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.
Gast #5208664
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren