sql >> Database teknologi >  >> RDS >> Mysql

Ikke i stand til at tilføje en kolonne fra en pandas dataramme til mysql i python

Du kan ikke tilføje en kolonne til din tabel med data i det hele i ét trin. Du skal bruge mindst to separate sætninger for at udføre DDL først (ALTER TABLE ) og DML-sekundet (UPDATE eller INSERT ... ON DUPLICATE KEY UPDATE ).

Det betyder, at for at tilføje en kolonne med en NOT NULL begrænsning kræver tre trin:

  1. Tilføj nullbar kolonne
  2. Udfyld kolonne med værdier i hver række
  3. Tilføj NOT NULL begrænsning til kolonnen

Alternativt, ved at bruge en "dummy"-standardværdi, kan du gøre det i to trin (bare pas på ikke at lade nogen "dummy"-værdier svæve rundt, eller brug værdier, der er meningsfulde/veldokumenterede):

  1. Tilføj kolonne som NOT NULL DEFAULT '' (eller brug f.eks. 0 for numeriske typer)
  2. Udfyld kolonne med værdier i hver række

Du kan valgfrit ændre tabellen igen for at fjerne DEFAULT værdi. Personligt foretrækker jeg den første metode, fordi den ikke introducerer meningsløse værdier i din tabel, og det er mere sandsynligt, at der kommer en fejl, hvis det andet trin har et problem. Jeg måske gå med den anden metode, når en kolonne egner sig til en bestemt naturlig DEFAULT værdi, og jeg planlægger at beholde det i definitionen af ​​sluttabellen.

Derudover parametrerer du ikke din forespørgsel korrekt; du bør give parameterværdierne til metoden i stedet for at formatere strengargumentet inde i metodekaldet. Med andre ord:

cursor.execute("Query with %s, %s, ...", iterable_with_values)  # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values)  # NOT this!



  1. Forklar Planlæg Cost Pain Point

  2. Jeg kan ikke bruge mysql_* funktioner efter opgradering af PHP

  3. RMySQL dbWriteTable med field.types

  4. MySQL-forespørgsel - Registrerer mellem i dag og sidste 30 dage