MySql mit Python3

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Duesentrieb
User
Beiträge: 52
Registriert: Sonntag 16. März 2014, 17:14

Hallo,

ich habe ein Problem mit meiner Datenbankabfrage in Python 3.
(Bisher habe ich Python 2 genutzt)

Code: Alles auswählen

import mysql.connector as mdb


con = mdb.connect('192.168.0.200', 'root', '', 'Poolsteuerung')

with con:
    cur = con.cursor()
    cur.execute("SELECT ID, Verzoegerung_Solar, Reinigen, Winter, Zeitfunktion, An, Aus FROM Vorgaben")
    result = cur.fetchall()
    lfd_db = 0

    for data in result:
        Verzoegerung_Solar = data[1]
        Reinigen = data[2]
        Winter = data[3]
        Zeitfunktion = data[4]
        Anlage_Aktiv_an = data[5]
        Anlage_Aktiv_aus = data[6]
Dabei erhalte ich die Fehlermeldung:

==================== RESTART: /home/pi/Datenbank_test.py ====================
Traceback (most recent call last):
File "/home/pi/Datenbank_test.py", line 4, in <module>
con = mdb.connect('192.168.0.200', 'root', '', 'Poolsteuerung')
File "/usr/lib/python3/dist-packages/mysql/connector/__init__.py", line 179, in connect
return MySQLConnection(*args, **kwargs)
File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 57, in __init__
super(MySQLConnection, self).__init__(*args, **kwargs)
TypeError: __init__() takes 1 positional argument but 5 were given
>>>

Hat jemand eine Idee was ich falsch mache?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

›connect‹ will wohl mit Keyword-Argumenten beliefert werden.
Am besten iterierst Du auch direkt über das Cursor-Objekt und entpackst das Tuple gleich in der for-Schleifen-Definition:

Code: Alles auswählen

for _, Verzoegerung_Solar, Reinigen, Winter, Zeitfunktion, Anlage_Aktiv_an, Anlage_Aktiv_aus in cur:
    ...
Wenn Du die ID nicht brauchst, warum fragst Du sie dann ab?
Duesentrieb
User
Beiträge: 52
Registriert: Sonntag 16. März 2014, 17:14

Habe ich das richtig verstanden?

Code: Alles auswählen

import mysql.connector as mdb


con = mdb.connect('192.168.0.200', 'root', '', 'Poolsteuerung')

with con:
    cur = con.cursor()
    cur.execute("SELECT Verzoegerung_Solar, Reinigen, Winter, Zeitfunktion, An FROM Vorgaben")
    result = cur.fetchall()
    lfd_db = 0


    for Verzoegerung_Solar, Reinigen, Winter, Zeitfunktion, Anlage_Aktiv_an, Anlage_Aktiv_aus in cur:
        Verzoegerung_Solar = data[1]
        Reinigen = data[2]
        Winter = data[3]
        Zeitfunktion = data[4]
        Anlage_Aktiv_an = data[5]
Am Fehler ändert dies nichts
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Das eine hat ja auch mit dem anderen nichts zu tun.

Code: Alles auswählen

import mysql.connector

con = mysql.connector.connect(user='root', password='', host='192.168.0.200', database='Poolsteuerung')
with con:
    cur = con.cursor()
    cur.execute("SELECT Verzoegerung_Solar, Reinigen, Winter, Zeitfunktion, An FROM Vorgaben")
    for Verzoegerung_Solar, Reinigen, Winter, Zeitfunktion, Anlage_Aktiv_an, Anlage_Aktiv_aus in cur:
        mach_irgendwas
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Duesentrieb hat geschrieben: Montag 3. Juni 2019, 19:34 Habe ich das richtig verstanden?

Code: Alles auswählen

[...]
    for Verzoegerung_Solar, Reinigen, Winter, Zeitfunktion, Anlage_Aktiv_an, Anlage_Aktiv_aus in cur:
        Verzoegerung_Solar = data[1]
        Reinigen = data[2]
        Winter = data[3]
        Zeitfunktion = data[4]
        Anlage_Aktiv_an = data[5]
Nein, hast du nicht. Durch die Definition i der for Zeile hast du doch die Werte für Verzoegerung_Solar, Reinigen usw. schon. Warum willst du sie noch mal setzen und woher soll data denn kommen?
Antworten