Seite 1 von 1
pyodbc.Row umwandeln
Verfasst: Mittwoch 22. Juni 2022, 10:28
von OWT
Hallo Zusammen
Nach Zugriff auf eine MSSQL Datenbank liegen meine Ergebnisse als Liste von pyodbc.Row vor. Nun würde ich gerne mit den Ergebnissen rechnen, hierzu müssen die aber umgewandelt werden!
Meine Daten sehen ungefähr so aus
Code: Alles auswählen
print(row)
Output --> [(1056, ), (651, ), (612, ), (179, ),... typ: list
print(row[0])
Output --> (1056, ), typ: pyodbc.Row
print(row[0][0])
Output --> 1056 typ: Int
Ich könnte eine Schleife schreiben und jeden Eintrag separat auspacken, da es aktuell "nur" 300 Stk sind, spricht wenig dagegen.
Aber diesen Post schreibe ich, weil ich mir nicht vorstellen kann, dass das mit der Schleife ein effizienter Weg ist. Kennt ihr vielleicht einen besseren Weg wie ich anschließend mit den Daten rechnen kann?
Vielen Dank
Re: pyodbc.Row umwandeln
Verfasst: Mittwoch 22. Juni 2022, 10:34
von __deets__
Wie schon an anderer Stelle angemerkt: row ist falsch, da es sich um mehrere Zeilen aus der DB handelt. rows waere also angemessen. Und wenn man jede Zeile betrachten will, dann ist eine for-Schleife schon das, was man da machen muss. Das wurde dir doch auch gezeigt, oder nicht?
Code: Alles auswählen
for row in rows: # rows ist was dein row war
name, telefonnummer, welpen_anzahl = row # Ein Weg die Daten zu entpacken.
for name, telefonnummer, welpen_anzahl in rows: # direkt entpacken
...
Re: pyodbc.Row umwandeln
Verfasst: Mittwoch 22. Juni 2022, 12:27
von OWT
naja, um ehrlich zu sein, das Feedback hier hat mich bis jetzt mehr verwirrt
Danke für deine Antwort, somit wäre nachfolgender Code vermutlich ganz OK.
Abgesehen davon, dass '+=' nicht verwendet wird und dass die variable k nicht sprechend benannt ist
Code: Alles auswählen
logger_ids = []
for k in logger_rows:
logger_ids += [k[0]]
Das heißt aber auch, dass ich jeden Messwert ein zweites mal in der Hand nehmen muss, bevor damit gearbeitet werden kann. Einmal beim Runterladen von der Datenbank und einmal beim umformatieren.
und danke nochmal für die Nomenklatur:
* eine Tabelle = rows
* ein Zeile in einer Tabelle = row
Schönen Tag noch
Re: pyodbc.Row umwandeln
Verfasst: Mittwoch 22. Juni 2022, 13:01
von __deets__
Na du hast nicht dazu Stellung bezogen, was genau du da machen willst. Wenn es nur um *eine* Spalte geht, dann geht das - wie ja auch schon von Sirius3 gezeigt - auch so
Man beachte das Komma hinter ID. Das ist eine List-Comprehension, aber "effzienter" in Bezug auf die Ausfuehrung ist das nicht. Nur etwas kompakter. Wenn es dir darum geht, dann ist (gab's da nicht auch schon Hinweise zu?) pandas besser, weil das auf maximalen Komfort beim Zugriff geeicht ist.
Re: pyodbc.Row umwandeln
Verfasst: Mittwoch 22. Juni 2022, 13:18
von OWT
ideal, danke nochmal.
ich wollte mich primär nur versichern, dass ich hier nicht auch etwas daher murkse, dass so nicht sein muss.
Re: pyodbc.Row umwandeln
Verfasst: Mittwoch 22. Juni 2022, 13:35
von __blackjack__
@OWT: Wenn Du weisst, das man ``+=`` so nicht verwendet, warum tust Du es denn schon wieder? Die passende Methode für die nicht erst eine unnötige Liste erstellt werden muss, heisst `append()`.
Bei Pandas wären wir dann wieder bei SQLAlchemy. Oder SQLite, denn ausser für SQLite ist die Funktionsweise von `read_sql_query()` für nichts anderes garantiert. Da wird als zweites Argument ein „connectable“-Objekt von SQLAlchemy, eine Zeichenkette mit einer URL für SQLAlchemy, oder ein `sqlite3.Connection`-Objekt unterstützt. Alles andere kann in Flammen aufgehen.
Re: pyodbc.Row umwandeln
Verfasst: Mittwoch 22. Juni 2022, 14:17
von OWT
Tradition ist, wenn man etwas macht, aber nicht weiß warum