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

Non è possibile aggiungere una colonna da un frame di dati panda a mysql in python

Non puoi aggiungere una colonna alla tabella con tutti i dati in un solo passaggio. È necessario utilizzare almeno due istruzioni separate per eseguire prima il DDL (ALTER TABLE ) e il secondo DML (UPDATE o INSERT ... ON DUPLICATE KEY UPDATE ).

Ciò significa che per aggiungere una colonna con un NOT NULL il vincolo richiede tre passaggi:

  1. Aggiungi colonna nullable
  2. Popolare la colonna con i valori in ogni riga
  3. Aggiungi il NOT NULL vincolo alla colonna

In alternativa, utilizzando un valore predefinito "fittizio", puoi farlo in due passaggi (fai solo attenzione a non lasciare valori "fittizi" fluttuanti o usa valori significativi/ben documentati):

  1. Aggiungi colonna come NOT NULL DEFAULT '' (o usa ad es. 0 per i tipi numerici)
  2. Popolare la colonna con i valori in ogni riga

Puoi opzionalmente modificare di nuovo la tabella per rimuovere il DEFAULT valore. Personalmente, preferisco il primo metodo perché non introduce valori privi di significato nella tabella ed è più probabile che generi un errore se il secondo passaggio presenta un problema. potrei vai con il secondo metodo quando una colonna si presta a un certo DEFAULT naturale valore e ho intenzione di mantenerlo nella definizione del tavolo finale.

Inoltre, non stai parametrizzando correttamente la tua query; dovresti passare i valori dei parametri al metodo anziché formattare l'argomento stringa all'interno della chiamata al metodo. In altre parole:

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