Seite 1 von 1

MySql mit Python3

Verfasst: Montag 3. Juni 2019, 18:49
von Duesentrieb
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?

Re: MySql mit Python3

Verfasst: Montag 3. Juni 2019, 18:58
von Sirius3
›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?

Re: MySql mit Python3

Verfasst: Montag 3. Juni 2019, 19:34
von Duesentrieb
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

Re: MySql mit Python3

Verfasst: Montag 3. Juni 2019, 19:49
von Sirius3
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

Re: MySql mit Python3

Verfasst: Montag 24. Juni 2019, 15:23
von /me
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?