Mit dem Python-MySQL-Update werden im Case-Konstrukt fest codierte Zeichenfolgen und Variablen zum vorhandenen Feld in dPython

Python-Programme
Anonymous
 Mit dem Python-MySQL-Update werden im Case-Konstrukt fest codierte Zeichenfolgen und Variablen zum vorhandenen Feld in d

Post by Anonymous »

Ich habe Probleme beim Aktualisieren eines Tabellenfelds in Python. Ich möchte fest codierten Text und eine Variable zu einem vorhandenen MySQL-Feld hinzufügen.
Es funktioniert mit einer fest codierten Zeichenfolge im else-Zweig. Ich hätte aber auch gerne ein Hardcodiertes ohne Zeilenumbruch und eine Variable im else-Zweig.
Ich habe hier nur den Quellcode mit dem entsprechenden Fehlercode gesendet, da der vollständige Code zu groß ist und man hier keinen vollständigen Code senden soll. Wenn mehr Quelltext benötigt wird, kann ich ihn auch senden.
Das funktioniert:

Code: Select all

sql_update_query = """Update darsteller_kf set gebname =IFNULL(gebname, %s),
nicknames=IFNULL(nicknames, %s),
markenzeichen=IFNULL(markenzeichen, %s),
zusatz_info=IFNULL(zusatz_info, %s),
gebort=IFNULL(gebort, %s),
todesort=IFNULL(todesort,%s),
gebdat =IFNULL(gebdat,%s),
gestorben = IFNULL(gestorben,%s),
todesursache =IFNULL(todesursache,%s),

biografie_en = CASE
WHEN    biografie_en IS NOT NULL THEN CONCAT(biografie_en, '\nIMDB Kurz-Bio:', %s)
ELSE CONCAT(biografie_en, 'IMDB Kurz-Bio:', %s)
END,

knownFor = IFNULL(knownFor,%s),

trivia = IFNULL(trivia, %s),
foto = IFNULL(foto, %s),
foto_online = IFNULL(foto_online, %s),
groesse = IFNULL(groesse, %s),
imdb_update_info = %s
where nconst = %s"""
print(sql_update_query)
#input_data = (lol_string, type_id, personNconst)
input_data = (myBirthName, nick_names_string, trade_mark_string, zusatzinfo_string, myBirtPlace,
myDeathPlace, myBirthDate, myDeathDate, deathNotes, mini_biography_string, KnownFor,
html_list, myHeadshot, fotoOnline, myHeight, imdb_update_info, personNconst)
cursor.execute(sql_update_query, input_data)
connection.commit()
print("Record Updated successfully ")
# Output the number of rows affected
print(cursor.rowcount, "record(s) affected.")

except mysql.connector.Error as error:
print("Failed to update record to database: {}".format(error))
finally:
if connection.is_connected():
cursor.close()
connection.close()
print("MySQL connection is closed")
Das funktioniert nicht.

Code: Select all

biografie_en = CASE
WHEN biografie_en IS NOT NULL THEN CONCAT(biografie_en, '\nIMDB Kurz-Bio:', %s)
ELSE CONCAT(biografie_en, 'IMDB Kurz-Bio:', %s)
END,
Ich erhalte diesen Fehler:
Aktualisierung des Datensatzes in die Datenbank fehlgeschlagen: 1210: Falsche Anzahl von Argumenten führt die vorbereitete Anweisung aus
Versuchen Sie, nur die Variable zu übergeben:

Code: Select all

biografie_en = CASE
WHEN biografie_en IS NOT NULL THEN CONCAT(biografie_en, '\nIMDB Kurz-Bio:', %s)
ELSE %s
END,
Dann erhalte ich die Fehlermeldung:
Aktualisierung des Datensatzes in die Datenbank fehlgeschlagen: 1210: Falsche Anzahl von Argumenten führt die vorbereitete Anweisung aus
Ich habe Stunden damit verbracht, viele Tests mit verschiedenen Codebeispielen auszuprobieren, aber nichts hat funktioniert.
Hat jemand Ideen zur Lösung dieses Problems?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post