mysql.connector Zeilenzahl liefern

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Gerenuk
User
Beiträge: 69
Registriert: Donnerstag 21. Januar 2010, 22:27

Ich versuche die Zeilenzahl eines selects zu ermitteln, aber es kommt mit mysql.connector immer nur -1 raus :( Vorschläge?

Ich schreibe

Code: Alles auswählen

cursor.execute("select * from abc")
count=cursor.rowcount
Mit select count(*) kam ich auch nicht weiter. Hmm..
lunar

@Gerenuk: Du musst wahrscheinlich die Ergebnisse abfragen, damit der Client weiß, wie viele Datensätze im Ergebnis enthalten sind. Das wäre zumindest logisch. Vor "cursor.rowcount" muss mithin "cursor.fetchall()" stehen.

So sollte man allerdings nicht zählen, da die Datenbank überflüssigerweise alle Ergebnisse zusammenstellen und übertragen muss. Effizienter ist es, die SQL-Funktion "count()" zu nutzen. Wieso hat das bei Dir nicht funktioniert? Wie hast Du es denn probiert?
Gerenuk
User
Beiträge: 69
Registriert: Donnerstag 21. Januar 2010, 22:27

Ich vermute fast fetchall würde gehen, aber die Tabelle ist sehr groß.

Und mit count bekomme ich komischerweise auch eine -1:

Code: Alles auswählen

import mysql.connector

connection=mysql.connector.connect(...)
cursor=connection.cursor()
count=cursor.execute("select count(*) from mytable")
print(count)
Müsste man das anders ansprechen?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Hat cursor.excecute() denn einen Rückgabewert? Ich dachte man muss sich die Daten direkt vom cursor holen.

Code: Alles auswählen

cursor.execute("select count(ID) from mytable")
print cursor.fetchone()
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Gerenuk
User
Beiträge: 69
Registriert: Donnerstag 21. Januar 2010, 22:27

Oh, wie unschlau von mir :)
Mit fetchone gehts. Danke!
Antworten