bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
CiberOT Ciberseguretat en Entorns d'Operació
Tots els mòduls del cicle
django_mongo

Aquesta és una revisió antiga del document


Django amb MongoDB

En aquest article provarem de veure quines opcions tenim per treballar amb Django i la BD basada en documents: MongoDB. La informació està extreta de diversos tutorials, articles i materials multimèdia trobats a motors de cerca fins a la data d'avui (23/06/2023). És probable i desitjable que l'estat del tema tingui variacions a partir d'aquesta data.

Referències:


Suport de Django a bases de dades NoSQL?

Segons la documentació Django actualment dona suport oficial a les següents bases de dades:

  • PostgreSQL
  • MariaDB
  • MySQL
  • Oracle
  • SQLite

Es a dir, bàsicament, l'ORM de Django mapeja funcions a consultes SQL i així és com llegim, escrivim i migrem la nostra base de dades. Això no vol dir no que puguem treballar amb MongoDB. Tenim eines que ens permeten connectar-nos a base de dades amb MongoDB. Les veiem a continuació:

  • Djongo : Ens permet treballar amb tot el potencial de Django amb MongoDB fent traduccions de les consultes SQL a la sintaxi de MongoDB permetent mantenir el potencial de l'ORM de Django i el seu sistema de models i migracions.
  • PyMongo i MongoEngine : PyMongo és el controlador estàndard mitjançant el qual MongoDB pot interactuar amb Django. És la forma oficial i preferida d'utilitzar MongoDB amb Python. PyMongo proporciona funcionalitat per dur a terme totes les accions de la base de dades com cercar, suprimir, actualitzar i inserir. MongoEngine és una capa ORM a la part superior de PyMongo. L'ús de MongoEngine per connectar Django i MongoDB us ofereix camps com ListField i DictField per gestionar enormes dades JSON no estructurades.

Djongo

Djongo no fa cap canvi al marc existent de Django ORM, la qual cosa significa que no apareixen errors innecessaris ni vulnerabilitats de seguretat. Simplement tradueix una cadena de consulta SQL a un document de consulta MongoDB . Com a resultat, totes les funcions, models, etc. de Django funcionen tal qual.

Si ja tens un projecte amb una base de dades SQL, instal·leu Djongo:

pip install djongo

Ara, aneu a la carpeta del vostre projecte (per exemple, MyFirstDjangoProj ) i obriu el fitxer settings.py. Podeu editar-lo a Textpad, Python IDE o qualsevol editor. Cerqueu BASES DE DADES i canvieu la configuració perquè apunti a MongoDB. El MOTOR serà djongo i el nom de la base de dades (NOM) serà el nom de la vostra base de dades MongoDB.

DATABASES = {
     'default': {
         'ENGINE': 'djongo',
         'NAME': 'db-name',
     }
 }

Si la vostra base de dades no es troba a localhost o està protegida, també hauríeu d'omplir la informació del CLIENT com HOST, USERNAME, PASSWORD, etc.

DATABASES = {
      'default': {
          'ENGINE': 'djongo',
          'NAME': 'your-db-name',
          'ENFORCE_SCHEMA': False,
          'CLIENT': {
              'host': 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority'
          }  
      }
}

Assegureu-vos que el nom de l'aplicació s'afegeix a la configuració INSTALLED_APPS del vostre settings.py:

INSTALLED_APPS = [
  'myfirstapp',
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
]

Ara que tenim el projecte (i l'aplicació) Django, podeu crear les col·leccions a MongoDB mitjançant les ordres:

python manage.py makemigrations <app-name>
python manage.py migrate

I podeu continuar fent servir el Django Admin.

Tot és fàcil i meravellós però:

Djongo encara està en estat de proves, és incomplet i només mapeja consultes bàsiques sense tenir en compte totes les funcionalitats. Si requeriu alguna cosa més complexa, us haureu d'espavilar vosaltres com a desenvolupadors.

Djongo actualment té molt poc suport a incidències que s'estàn generant i ara per ara no es compatible a versions del Django superiors a la 3.0.5.

Djongo converteix les consultes SQL en consultes MongoDB, cosa que realment no té sentit en una base de dades de documents. No obtindreu cap dels avantatges de MongoDB. I en realitat podria provocar un rendiment baix a MongoDB vs SQL.

Continua sent una eina molt potent i per desenvolupaments petits o pràctiques d'aula crec que me'l quedo. Però aneu molt amb compte per desenvolupaments més grans o amb moltes dades.

Connecteu Django i MongoDB mitjançant PyMongo

PyMongo és el controlador natural per connectar-nos de manera eficient a una base de dades MongoDB. Com que PyMongo està disponible amb PyPI, podeu instal·lar-lo ràpidament mitjançant una comanda pip:

pip install pymongo[snappy,gssapi,srv,tls]
Tutorial ràpid CRUD amb PyMongo
En aquest tutorial ràpid, demostrarem com utilitzar PyMongo per fer operacions CRUD senzilles. Per a això, creem una sessió de PyMongo:
import pymongo
#connect_string = 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority' 
 
from django.conf import settings
my_client = pymongo.MongoClient(connect_string)
 
# First define the database name
dbname = my_client['sample_medicines']
 
# Now get/create collection name (remember that you will see the database in your mongodb cluster only after you create a collection
collection_name = dbname["medicinedetails"]
 
#let's create two documents
medicine_1 = {
    "medicine_id": "RR000123456",
    "common_name" : "Paracetamol",
    "scientific_name" : "",
    "available" : "Y",
    "category": "fever"
}
medicine_2 = {
    "medicine_id": "RR000342522",
    "common_name" : "Metformin",
    "scientific_name" : "",
    "available" : "Y",
    "category" : "type 2 diabetes"
}
# Insert the documents
collection_name.insert_many([medicine_1,medicine_2])
# Check the count
count = collection_name.count()
print(count)
 
# Read the documents
med_details = collection_name.find({})
# Print on the terminal
for r in med_details:
    print(r["common_name"])
# Update one document
update_data = collection_name.update_one({'medicine_id':'RR000123456'}, {'$set':{'common_name':'Paracetamol 500'}})
 
# Delete one document
delete_data = collection_name.delete_one({'medicine_id':'RR000123456'})


Exemple Codi Online

Crearem un projecte Django i provarem si funciona simplement amb:

(env) $ django-admin startproject myproject
(env) $ cd myproject
(env) $ ./manage.py runserver

I per comprovar-ho accedeix amb el navegador a http://localhost:8000.

Si volem endinsar-nos a la programació amb Django es recomana seguir l'excel·lent tutorial oficial Django.


Exemple Wrap important

Anem a Github (o a Gitlab, Bitbucket, etc.) i fem crear un nou repositori. Si ho feu a la web, ella mateix ens donarà la «xuleta» de com inicialitzar el nostre projecte i connectar-lo al repo remot.

No pugeu res al repositori remot fins que hagueu configurat correctament el projecte amb el .gitignore com es descriu més avall.

En particular, prengueu cura de no fer cap git add . (afegeix tots els arxius) fins no tenir el .gitignore a l'arrel.

Teniu articles amb informació extensa sobre el sistema de control de versions i de Git en particular.

Exemple Wrap info

Podeu llegir referències sobre els potents formularis de Django a Django Formularis.

Exemple Wrap todo

Formularis

Elabora formularis per:

  1. Crear lliga.
    • Assegura't que si ja hi ha una lliga amb el mateix nom, no ens deixi guardar.
    • Pots fer-ho amb Form o amb ModelForm.
  2. Crear equip.
  3. Assignar equips a una lliga (afegir o treure).
django_mongo.1688055935.txt.gz · Darrera modificació: 2023/06/29 16:25 per david_lozano