Das Python-MySQL-Update fügt fest codierte Zeichenfolgen und Variablen zum Exit-Feld in der MySQL-Tabelle hinzu, falls eMySql

MySQL DBMS-Forum
Anonymous
 Das Python-MySQL-Update fügt fest codierte Zeichenfolgen und Variablen zum Exit-Feld in der MySQL-Tabelle hinzu, falls e

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 (mit einer fest codierten Zeichenfolge):

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 'hard-coded string'
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")
Record Updated successfully
1 record(s) affected.
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:
Fehler beim Aktualisieren des Datensatzes in der Datenbank: 1210: Falsche Anzahl von Argumenten beim Ausführen der vorbereiteten Anweisung.
Das Problem ist die Syntax in der else-Anweisung!
Wenn ich etwas anderes als eine fest codierte Zeichenfolge in die else-Anweisung einfüge, erhalte ich eine Fehlermeldung.
Ich habe Stunden damit verbracht, viele Tests mit unterschiedlichem Code auszuprobieren Beispiele, aber nichts hat funktioniert.
Ich kann einfach keine fest codierte Zeichenfolge mit einer Variablen (%s) im else-Zweig übergeben.
Hat jemand Ideen zur Lösung dieses Problems?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post