sqlite - Spaltenname mit Variable aufrufen.

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Medicode
User
Beiträge: 3
Registriert: Montag 16. November 2020, 14:03

Hallo zusammen,

ich möchte ein Funktion entwickeln, die einen Datenbankeintrag ändert (Update). Diese Funktion soll drei Variablen erhalten. Eine eindeutige Personal-ID, die zu ändernde Spalte (auch als Variable) und der Wert der eben dort geändert werden soll.

Hintergrund ist, dass ich später von einer GUI aus diese drei Werte an die Funktion übergeben möchte, womit ich dann Änderung vornehme.

Der Code funktioniert nicht:

Code: Alles auswählen

def update():
    user_input = ['vorname', 'Tom', '1112']
    zeiger.execute("""UPDATE Personal SET ? = ? WHERE nummer = ?""",(user_input[0], user_input[1], user_input[2]))
dieser schon, ich möchte jedoch auch einen andern Spaltenwert ändern. (z.B. nachname)

Code: Alles auswählen

def update():
    user_input = ['Tom','1112']
    
    zeiger.execute("""UPDATE Personal SET vorname = ? WHERE nummer = ?""",(user_input[0], user_input[1]))

Im folgenden der Datenbankeintrag zum Verständnis:

Code: Alles auswählen

import sqlite3
verbindung = sqlite3.connect("Werte.db")#Verbindug zur Datenbank
zeiger = verbindung.cursor()#Zugriff auf Datenbankinhalte

nummer     = "1112" # diese Nummer wird später generiert. 
nachname   = "Muster"
vorname    = "Max"
geburtstag = "01.01.1901"
lohngruppe = "3"
eMail =     "max.mustermann@hotmail.de"
geschlecht = "m" #
Benutzeravatar
sparrow
User
Beiträge: 4370
Registriert: Freitag 17. April 2009, 10:28

Das liegt daran, dass man das nicht macht. Die Namen von Tabellen und Feldern werden nicht dynamisch angesprochen. Und deshalb ist das nicht möglich.

Allgemein gilt: SQL in Python? Nimm SQLAlchemy
Benutzeravatar
noisefloor
User
Beiträge: 3942
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Ergänzung zu
Die Namen von Tabellen und Feldern werden nicht dynamisch angesprochen
Wenn man der Meinung ist, dass man das braucht, hat man in der Regel einen Fehler im Datenbankentwurf, also wie die Tabellen angelegt sind, welche Felder darin sind und welche Relationen man gesetzt hat.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13572
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das sieht mir hier nach einem unnötigen Mikrooptimierungsversuch aus. Man würde einfach alle Werte, die der Benutzer bearbeiten kann aktualisieren, und nicht nur den oder die, die vom Benutzer tatsächlich verändert wurden.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten