¿Cómo conectar Django a una base de datos?

33/37

Lectura

Django obtiene la estructura, acceso y control de los datos de una aplicación a través de su ORM (Object Relational Mapper), esto significa que no importa qué motor de base de datos esté usando, el mismo código seguirá funcionando, configurar esto en un proyecto de Django es cuestión de segundos.

Todo se define dentro del archivo settings.py de nuestro proyecto dentro de la variable DATABASES:

DATABASE

Será el nodo padre que nos servirá para indicar que definiremos una base de datos.
Dentro, tendremos el nodo default este tendrá toda la configuración clave de la base de datos.

datos para conexión de base de datos django.png

Además, Django puede trabajar con múltiples bases de datos usando una estrategia llamada routers por lo que el diccionario DATABASES puede contener múltiples llaves con diferentes bases de datos. Pero eso sí, necesita siempre existir una llave “default”.

Es un diccionario de python el cual requiere definir una base de datos por default, más de eso al final, usando la llave default que a su vez será otro diccionario con los datos de configuración:

La configuración recibirá el engine el cual puede ser:

PostgreSQL: 'django.db.backends.postgresql’
MySQL: 'django.db.backends.mysql’
SQLite: 'django.db.backends.sqlite3’
Oracle: 'Django.db.backends.oracle’
El nombre de la base de datos “NAME”.
El usuario “USER”.
La contraseña “PASSWORD”.
La ubicación o host del servidor de la base de datos “HOST”.
Y el puerto de conexión “PORT”.

Adicionalmente, se pueden configurar más detalles por base de datos, por ejemplo, configurar que todos los queries de una vista sean empaquetados en una sola transacción a la base de datos usando ATOMIC_REQUESTS=True

Django-database.png

Aportes 18

Preguntas 1

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Para mí este sería mi primer deploy de una app y como muchos tal vez se sienta perdido pero encontré oro en este enlace puedes encontrar el deploy de una app en AWS junto con Pablo Trinidad espero te sirva

Entonces se puede hacer el mismo CREATE (por ejemplo), a dos BD distintas?

¿No faltaría instalar la dependencia ‘psycopg2’?

Existe alguna recomendación o estilo propuesto por Django para no tener Campos “SECRETOS” en el código? ya que tanto SECRET_KEY o los passwords de las bases de datos están “HardCodeados” además de que cuando estos se suban a Github estaría exponiendo mi sistema

Umm esto debió haber sido un videotutorial, la documentación es muy superficial, por ejemplo a mi me queda la duda, de si en mi entorno virtual quiero correr mi proyecto conectado con la base de datos postgres como lo hago, es necesario crear la base de datos antes o django la crea por mi? y no comenta nada del Psycopg2, se nota el afán de querer acabar rápido el curso

Esta lectura debe de ser un tema para varias clases por ques muy importante en proyectos.
No solo debe de ser una lectura corta.

¿Se puede utilizar SQL en vez del ORM de Django? (Se tendría que especificar en setting .py, o solo colocar la consulta SQL en queryset)
Esto lo pregunto porque hace poco Freddy Vega comento que el uso de ORM’s puede causa mala optimización para el software.

Hola, como seria la configuracion para conectar a una BAse de datos Microsoft SQL Server?

esta es mi configuracion en settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "platzi",
        "USER": "root",
        "PASSWORD": "antoine",
        "HOST": "",
        "PORT": 3307,
    }
}```

±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| platzi |
| proyectofatz |
| sakila |
| sys |
| world |
±-------------------+```

django.db.utils.OperationalError: (1049, "Unknown database 'platzi'")```


No entiendo porque me dice error en el nombre de la base de datos 

Beuna tarde, alguien sabe como arreglar esto:

(venv) [email protected]:~/JS/django/platzigram-deployment/platzigram$ python3 manage.py migrate
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes, posts, sessions, sites, socialaccount, users
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying account.0001_initial… OK
Applying account.0002_email_max_length… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying admin.0003_logentry_add_action_flag_choices… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying auth.0009_alter_user_last_name_max_length… OK
Applying users.0001_initial… OK
Applying posts.0001_initial… OK
Applying posts.0002_user_is_admin…Traceback (most recent call last):
File “manage.py”, line 15, in <module>
execute_from_command_line(sys.argv)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/core/management/init.py”, line 381, in execute_from_command_line
utility.execute()
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/core/management/init.py”, line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/core/management/base.py”, line 316, in run_from_argv
self.execute(*args, **cmd_options)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/core/management/base.py”, line 353, in execute
output = self.handle(*args, **options)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/core/management/base.py”, line 83, in wrapped
res = handle_func(*args, **kwargs)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/core/management/commands/migrate.py”, line 201, in handle
post_migrate_state = executor.migrate(
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/db/migrations/executor.py”, line 117, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/db/migrations/executor.py”, line 147, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/db/migrations/executor.py”, line 244, in apply_migration
state = migration.apply(state, schema_editor)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/db/migrations/migration.py”, line 114, in apply
operation.state_forwards(self.app_label, project_state)
File “/home/dpeniafiel/JS/django/platzigram-deployment/platzigram/venv/lib/python3.8/site-packages/django/db/migrations/operations/fields.py”, line 70, in state_forwards
state.models[app_label, self.model_name_lower].fields.append((self.name, field))
KeyError: (‘posts’, ‘user’)

de acuerdo en que este tema se debio tratar como clase y no documentacion, pero bueno con cualquier otro lenguaje si tienes orden al programar y usas conceptos de clases , instanciar , heredar etc, tambien se puede usar el mismo codigo indiferentemente la bd.

el ORM encapsula todo el trabajo de hacer querys extensas. Ahorra bastante trabajo.

Confi con MySQL

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': 3306,
    }
}```

tengo una duda, cómo podemos proteger las contraseñas si es que queremos subir un proyecto a github?. Me imagino usar algún tipo de documento externo que le pase las contraseñas y ponerlo en el gitignore, pero no se como se hace eso… agradecería los consejos y guías 😃

Perfecto!

Excelente, gracias

Consulta y si tengo tablas existente de las cuales quisiera sacar información para mostrar en la aplicación como se realizaría en django?