with tutorial framework español djangoproject desde con cero applications sqlite alter-table

tutorial - Columna de modificación SQLite



tutorial django (4)

Necesito modificar una columna en una base de datos SQLite, pero tengo que hacerlo programáticamente debido a que la base de datos ya está en producción. De mi investigación, he descubierto que para hacer esto debo hacer lo siguiente.

  • Crea una nueva tabla con un nuevo esquema
  • Copie los datos de la tabla anterior a la nueva tabla
  • Dejar la mesa vieja
  • Cambiar el nombre de una nueva tabla al nombre de tablas antiguas

Parece una ridícula cantidad de trabajo para algo que debería ser relativamente fácil. ¿No hay una manera más fácil? Todo lo que necesito hacer es cambiar una restricción en una columna existente y darle un valor predeterminado.


Como se dijo here , este tipo de características no están implementadas por SQLite.

Como nota al margen, puede hacer sus dos primeros pasos con una tabla de creación con seleccionar:

CREATE TABLE tmp_table AS SELECT id, name FROM src_table


Cuando ejecuté "CREATE TABLE tmp_table AS SELECT id, name FROM src_table", perdí todo el formato del tipo de columna (por ejemplo, campo de tiempo convertido en un campo entero

Como inicialmente dije, parece que debería ser más fácil, pero esto es lo que hice para arreglarlo. Tuve este problema b / c. Quería cambiar el campo No nulo en una columna y Sqlite realmente no ayuda allí.

Usando el navegador addon ''SQLite Manager'' de Firefox (usa lo que quieras). Creé la nueva tabla copiando la antigua declaración de creación, hice mi modificación y la ejecuté. Luego, para copiar los datos, simplemente resalté las filas, hago clic R en "Copiar fila (s) como SQL", reemplazo "someTable" con mi nombre de tabla y ejecuto el SQL.


Si la modificación no es demasiado grande (por ejemplo, cambie la longitud de un varchar), puede volcar el archivo db, editar manualmente la definición de la base de datos e importarla de nuevo:

echo ''.dump'' | sqlite3 test.db > test.dump

luego abra el archivo con un editor de texto, busque la definición que desea modificar y luego:

cat test.dump | sqlite3 new-test.db


Esa es una de las desventajas más conocidas de SQLite (no es compatible con MODIFY COLUMN en ALTER TABLE ), pero está en la lista de funciones de SQL que SQLite no implementa .

editar: Se eliminó el bit que mencionó que podría ser compatible en una versión futura ya que la página se actualizó para indicar que ya no es el caso