sql >> Databasteknik >  >> RDS >> Mysql

Det går inte att lägga till en kolumn från en pandas dataram till mysql i python

Du kan inte lägga till en kolumn i din tabell med data i allt i ett steg. Du måste använda minst två separata satser för att utföra DDL först (ALTER TABLE ) och DML-sekunden (UPDATE eller INSERT ... ON DUPLICATE KEY UPDATE ).

Detta betyder att för att lägga till en kolumn med en NOT NULL begränsning kräver tre steg:

  1. Lägg till nullbar kolumn
  2. Fyll i kolumn med värden i varje rad
  3. Lägg till NOT NULL begränsning för kolumnen

Alternativt, genom att använda ett "dummy"-standardvärde, kan du göra det i två steg (var bara försiktig så att du inte låter några "dummy"-värden flyta runt, eller använd värden som är meningsfulla/väldokumenterade):

  1. Lägg till kolumn som NOT NULL DEFAULT '' (eller använd t.ex. 0 för numeriska typer)
  2. Fyll i kolumn med värden i varje rad

Du kan valfritt ändra tabellen igen för att ta bort DEFAULT värde. Personligen föredrar jag den första metoden eftersom den inte introducerar meningslösa värden i din tabell och det är mer troligt att det ger ett fel om det andra steget har ett problem. Jag kanske gå med den andra metoden när en kolumn lämpar sig för en viss naturlig DEFAULT värde och jag planerar att behålla det i sluttabellsdefinitionen.

Dessutom parametriserar du inte din fråga korrekt; du bör överföra parametervärdena till metoden istället för att formatera strängargumentet i metodanropet. Med andra ord:

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



  1. Mysql-dev för mac os

  2. Totalt löper över datumintervallet – fyll i de datum som saknas

  3. MySQL - DATE_ADD månadsintervall

  4. ORA-01843 inte en giltig månad- Jämför datum