2011-09-06 13 views
12

Así que tener un modelo que quería añadir a ImageField, por lo que he escrito en foto = models.ImageField (upload_to = 'media/images')DatabaseError: No existe el error de la columna

Entonces me encontré con syncdb y entró en el shell:

python2 manage.py syncdb 
python2 manage.py shell 

entonces me importó el modelo y trató

"model".objects.get(pk=1) 

me sale el error:

DatabaseError: no such column: people_people.picture 

Cuando ejecutar SQL manage.py para el modelo

"picture" varchar(100) NOT NULL 

está en la base de datos.

¿Qué soluciones tienen ustedes? No puedo borrar los datos en la base de datos.

Respuesta

27

Como se indica en the documentationsyncdb no agrega columnas a las tablas existentes, solo crea nuevas tablas.

Le sugerimos que ejecute

python manage.py sqlall <your_app> 

Mirando el sql que da salida para la tabla que está cambiando, y luego ejecutar

python manage.py dbshell 

con el fin de emitir un comando manualmente ALTER TABLE.

En el futuro, es posible que desee utilizar una herramienta de migración como South.

3

Existen dos posibilidades para obtener este error 1) Agregaste un campo extra al modelo después de hacer el syncdb. 2) agregaste una nueva clase al archivo model.py en django.

solución para esto es:

Primero instale al sur con el comando

for windows: **easy_install south**  //for that you need to go to the script folder of python folder in c drive. 

for linux: **sudo easy_install south** 

A continuación, siga los pasos que se incluyen aquí tutoriales de migración

pitón step1- manage.py schemamigration your_app_name - inicial

step-2 python manage.py migrate your_app_name Espero que esto te ayude.

0

A partir del 1.7 migrations within Django reemplaza a South.

Crear un nuevo conjunto de instrucciones de migración mediante la ejecución del siguiente comando en el terminal:

$ python manage.py makemigrations 

comprobar la salida en la carpeta de la migración se crea para asegurarse de que tienen sentido a continuación, ejecutar el comando en el terminal siguiente para completar la migraciones:

$ python manage.py migrate 

Eso es todo.

La ejecución de migraciones de esta manera permite a otros implementar las mismas migraciones en lugar de tener que implementar cambios de db manualmente en todas las máquinas que usan el código. En la nueva máquina, todo lo que tienen que ejecutar es:

$ python manage.py migrate 
+1

Sería bueno expandir esta respuesta, mostrando cómo usarías las migraciones para lograr el objetivo establecido. – kdopen

Cuestiones relacionadas