mysql: daten werden nicht eingefügt

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo,

ich versuche gerade mit einem Multi-Insertbefehl Daten in eine Tabelle einfügen. Doch leider werden die Daten nicht eingefügt oder eine Fehlermeldung ausgegeben. das SQL-Statement ist ein kleiner Teil des Statements. Was mache ich hier falsch?

Code: Alles auswählen

def insertVariblesIntoTable():
    sql = get_sql_queries()
    sql = """INSERT INTO `avg_day_temps` (`id`, `temperatur1`, `temperatur2`, `datum`) VALUES(1,'18.11','11.82','2020-03-30'),
(2,'18.11','11.82','2020-03-30')
"""
    try:
        connection = mysql.connector.connect(host='localhost',
                                             database='temperatur_garten_test',
                                             user='root',
                                             password='')
        cursor = connection.cursor()
        cursor.execute(sql, multi=True)
        connection.commit()
    except mysql.connector.Error as error:
        print("Failed to insert into MySQL table {}".format(error))

insertVariblesIntoTable()
VG Georg
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich müsste nachlesen, aber aus dem dem Bauch: einfach Tupel Anhängen ist nicht. Das muss schon jedes Mal ein vollständiges SQL Statement sein.
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und dann stellt sich die Frage warum dieser nicht-standard-Weg und nicht `executemany()`?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

ich habe jetzt ein paar sachen geändert,

Da Query habe ich mal verändert und bei beiden Einträgen ein vollständiges Query erstellt. Was mich nur irritiert, dass jedes mal KEINE Fehlermeldung kommt. Ich würde gerne mal sehen wollen, was er für ein Problem hat. Ich habe mal eine Spalte im Query falsch geschrieben, dennoch spuckt er keine Fehler aus. Da sirritiert mich etwas. Ic habe schon mit PonyORM gearbeitet, dort wird man so etwas von Zugeschwallt mit Exceptions. Hier aber scheine ich mich echt zu doof anzustellen.

Es wird weder der Eintrag gemacht noch ein Fehler geworfen.

In diesem Query ist die erste Spalte falsch geschrieben statt temperatur1 habe ich temperdatur1 geschreiben. Dennoch wird keine Fehlermeldung ausgeworfen

Code: Alles auswählen

  sql = """INSERT INTO `avg_day_temps` (`id`, `temperdatur1`, `temperatur2`, `datum`) VALUES(1,'18.11','11.82','2020-03-30');
INSERT INTO `avg_day_temps` VALUES (2,'18.11','11.82','2020-03-30');
"""
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich hab kein mysql um das Testen zu können, aber andere Datenbanken liefern erwartungsgemäß Exceptions.

Funktionsnamen schreibt man wie Variablen klein_mit_unterstrich. Mit dem Rückgabewert von `get_sql_queries` wird gar nichts gemacht. Auch bei Tabellennamen sind Abkürzungen tabu. Es stört niemanden, wenn man das ausschreibt: `average_day_temperatures`. `id`s werden normalerweise automatisch erzeugt. Temperaturen sollten Zahlen sein, und keine Strings. Für Datum gilt eigentlich das selbe.
Um es nochmal zu sagen, korrekt ist executemany.

Code: Alles auswählen

values = [
    (18.11, 11.82, '2020-03-30'),
    (17.43, 10.21, '2020-03-31')
]
cursor.executemany("INSERT INTO average_day_temperatures (temperatur1, temperatur2, datum) VALUES (%s, %s, %s)", values)
Antworten