2010-09-14 15 views
10

Recibo un error cuando trato de volcar datos a un dispositivo JSON en Djanog 1.2.1 en mi servidor en vivo. En el servidor vivo está ejecutando MySQL Server versión 5.0.77 e importé una gran cantidad de datos a mis tablas usando la interfaz phpMyAdmin. El sitio web funciona bien y el administrador de Django responde de manera normal. Pero cuando intento y, de hecho volcar los datos de la aplicación que corresponde a las tablas consigo este error:En Django, obteniendo un "Error: ¿no se puede serializar la base de datos" al intentar volcar datos?

$ python manage.py dumpdata --indent=2 gigs > fixtures/gigs_100914.json 
/usr/local/lib/python2.6/site-packages/MySQLdb/__init__.py:34: DeprecationWarning: the sets module is deprecated 
    from sets import ImmutableSet 
Error: Unable to serialize database: Location matching query does not exist. 

Modelo Mi Django para conciertos '' que estoy tratando de volcar, desde miradas como este en los modelos Archivo .py:

Como digo, Django está de acuerdo con los datos. El sitio funciona bien y las relaciones parecen funcionar absolutamente bien. Cuando una carrera el comando SQL para conseguir lo está usando Django:

$ python manage.py sql gigs 
/usr/local/lib/python2.6/site-packages/MySQLdb/__init__.py:34: DeprecationWarning: the sets module is deprecated 
    from sets import ImmutableSet 
BEGIN;CREATE TABLE `gigs_location` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `name` varchar(120) 
) 
; 
CREATE TABLE `gigs_venue` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `name` varchar(120), 
    `contact` varchar(250), 
    `url` varchar(60) 
) 
; 
CREATE TABLE `gigs_gig` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `date` date, 
    `details` varchar(250), 
    `location_id` integer NOT NULL, 
    `venue_id` integer NOT NULL 
) 
; 
ALTER TABLE `gigs_gig` ADD CONSTRAINT `venue_id_refs_id_3d901b6d` FOREIGN KEY (`venue_id`) REFERENCES `gigs_venue` (`id`); 
ALTER TABLE `gigs_gig` ADD CONSTRAINT `location_id_refs_id_2f8d7a0` FOREIGN KEY (`location_id`) REFERENCES `gigs_location` (`id`);COMMIT; 

He comprobado los datos de triple, atravesado para asegurarse de que todas las relaciones y datos está bien después de la importación. Pero sigo teniendo este error, tres días después ... Estoy atascado con qué hacer al respecto. No me puedo imaginar que la "Defensa de la Deprecación" vaya a ser un problema aquí. Realmente necesito volcar esta información como JSON.

Muchas gracias por cualquier ayuda.

+0

Ejecútelo con --traceback para ver el error subyacente –

+0

¿Ha logrado encontrar el error ?. He corrido en una situación similar tratando de deshacerme de un montón de modelos obtenidos a través de 'inspectdb' ... No obtengo' DoesNotExists' (puede deberse a la versión más nueva). Pero django no puede buscar un coulmn existente ... – tutuca

Respuesta

10

Podría ser algo similar a this.

Ejecutar con:

python manage.py dumpdata --indent=2 -v 2 --traceback gigs 

Para ver el error subyacente.

3

Una vez me encontré con un problema similar en el que el mensaje de error era tan fascinante como el suyo. La causa fue la falta de memoria en mi servidor. Parece que la generación de depósitos en json es bastante costosa. Solo tenía 60 megas de memoria (en djangohosting.ch) y no fue suficiente para obtener un volcado para una base de datos MySQL para la cual el volcado de MySQL era de solo 1 meg.

Pude averiguar mirando el proceso de python alcanzar el límite de 60 megas usando el comando superior en una segunda línea de comando mientras ejecutaba manage.py dumpdata en la primera.

Mi solución: obtener el volcado de MySQL y luego cargarlo en mi PC de escritorio, antes de generar el volcado json. Dicho esto, para fines de copia de seguridad, los volcados de mysql son suficientes.

El comando para obtener un volcado de MySQL es la siguiente:

mysqldump -p [password] -u [username] [database_name] > [dump_file_name].sql 

Dicho esto, el problema podría ser completamente diferente. Debería mirar todas las tablas que tienen una clave externa a su tabla de Ubicación, y verificar si no hay un campo apuntando a una ubicación previamente eliminada. Lamentablemente, MySQL es muy malo para mantener la integridad referencial y no puede contar con ello.

Cuestiones relacionadas