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

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.