es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Django: Cambio de BD de Sqlite3 a Postgres – ¿debo hacer algo más para reflejar los cambios?

En mi servidor, cambié la base de datos de SQlite3 a Postgres. Debido a que este es un sitio web nuevo y aún no tiene muchos datos (excepto cosas de prueba), no tuve que hacer una migración de base de datos o cualquier otra cosa que se llame así. Simplemente cambié settings.DATABASES para incluir Postgres. Aquí está mi settings.DATABASES en settings.py:

from sys import platform
if platform == 'darwin':  # OSX
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR + '/db.sqlite3',
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'pfcbookclub',
            'USER': 'admin',
            'PASSWORD': 'g&zy8Je!u',
            'HOST': '127.0.0.1',
            'PORT': '5432',
        }
    }

Desarrollo en un M1, y psycopg2 no parece funcionar para mí, por más veces que intente instalar libq o openssl con Homebrew en Rosetta, razón por la cual decidí usar Sqlite en mi Mac y Postgres en mi servidor.

Ahora, cuando transferí estos cambios con git a mi servidor, actualicé la página en mi dominio, pero todos los datos de prueba que había llenado en mi base de datos de Sqlite3 seguían apareciendo. Pensé que estaría vacía porque no había llenado la base de datos de Postgres con nada y no hice ninguna migración que convirtiera db.sqlite3 en algo de Postgres.

¿Esto es lo que se suponía que debía suceder? Si es así, ¿por qué?

Si eso no es lo que se supone que deba suceder, supongo que debo volver a cargar gunicorn o daemon o nginx o algo más. ¿Qué debo hacer? ¿Por qué?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Si acaba de cambiar el motor de la base de datos en settings.py sin ejecutar ningún comando de migración, entonces los datos en la base de datos Sqlite3 deberían seguir siendo accesibles después de cambiar a Postgres. Django no migra automáticamente los datos cuando se cambia el motor de la base de datos, por lo que seguirá utilizando la base de datos Sqlite3 existente a menos que migre explícitamente los datos a Postgres.

    Para migrar los datos de Sqlite3 a Postgres, puede utilizar los comandos dumpdata y loaddata para volcar los datos de la base de datos existente en un archivo JSON, y luego cargarlo en la nueva base de datos de Postgres. Puede encontrar más información sobre este proceso en la documentación de Django: https://docs.djangoproject.com/en/3.2/howto/writing-migrations/#migrating-data

    Alternativamente, si solo tiene datos de prueba en la base de datos de Sqlite3 y desea comenzar con una nueva base de datos de Postgres vacía, puede eliminar el archivo de Sqlite3 y crear una nueva base de datos de Postgres vacía. Luego, ejecute las migraciones para crear las tablas necesarias en la nueva base de datos. Puede usar el comando migrate para ejecutar las migraciones: python manage.py migrate.

    En cuanto al problema con psycopg2 que no funciona en su M1, es posible que desee intentar instalar el paquete psycopg2-binary en su lugar, el cual proporciona un binario precompilado y debería funcionar en todas las plataformas. Puede instalarlo con pip: pip install psycopg2-binary.

Comments are closed.