tuple mit %s füllen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kiaralle
User
Beiträge: 68
Registriert: Donnerstag 19. August 2021, 19:11

Hallo,

ich probiere gerade ein Tuple mit %s zu füllen.
Ich möchte automatisch die Anzahl für VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) über eine Schleife erzeugen.
Verwenden möchte ich das zum speichern in Mariadb

Code: Alles auswählen

statement = "INSERT INTO master_0 (reg_0, reg_1, reg_2, reg_3 , reg_4, reg_5, reg_6, reg_7, reg_8, reg_9) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
Soll eventuell dann mal so ausschauen.

Code: Alles auswählen

statement = "INSERT INTO master_0 (list_tulp) VALUES (s)"
Mein Code als Vorstufe für meine Idee:

Code: Alles auswählen

i = 0
n = 100
liste = []
liste_tulp = ()
s = ()

while i <= n:
    liste.append(i)
    i += 1

print(liste)

for liste_read in liste:
    print(liste_read)
    liste_tulp = liste_tulp + (liste_read,)
    s = s + ('%s',)

print(liste_tulp)
print(s)

Ich erhalte für liste_tulp:
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)
Glaube, kann ich so verwenden

Für s was mein Value werden sollte:
('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')
Kann ich sicher so nicht verwenden. Störend sind die ' ' .
Wie mache ich das richtig.

Gruß Ralf
Sirius3
User
Beiträge: 17762
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Tabellendesign ist etwas fixes, und da gibt es meist nur eine handvoll Felder, weil mehr einfach zu unübersichtlich wird. Das kann man also schon einmal von Hand schreiben. Was soll das denn für eine Tabelle mit 100 Feldern sein? Die brauchen ja auch alle einen sprechenden Namen. Ich hoffe mal, die Tabelle heißt nicht wirklich master_0??

Der einzige Fall, wo man %s mit unbekannter Anzahl an Elementen ist, wenn man ein `WHERE feld in (%s, %s)` hat, wo man nach mehreren Werten sucht.

Variablen definiert man erst, wenn man sie braucht. liste_tulp und s werden erst viel später gebraucht. Variablennamen sollten aussagekräftig sein, `liste` ist das nicht, und warum stehen in der Liste Elemente die `liste_read` heißen?
Die Liste mit den Tulpen hat den selben Inhalt wie `liste` ist nur vom Typ tuple. Tuple werden nicht erzeugt, indem man immer wieder ein Element anhängt.
Die while-Schleife ist eigentlich eine for-Schleife aber eigentlich nur ein range-Aufruf.

Das ganze könnte also so aussehen:

Code: Alles auswählen

numbers = tuple(range(100))
placeholders = ('%s', ) * len(numbers)
Wenn man daraus dann einen String machen möchte, benutzt man `join`.
kiaralle
User
Beiträge: 68
Registriert: Donnerstag 19. August 2021, 19:11

@Sirius3,
danke das hilft mir ungemein weiter.

Ich schreibe immer mal wieder an meiner Solar-Steuerung, Lastabwurf einzelner Verbraucher (E-Auto, Heizungsstab...) mit Datenbankanbindung.
Alles läuft super, aber man will es immer besser machen. Und das macht dann wieder Spass :-)
Antworten