Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
django_mongo [2023/06/23 08:55] david_lozano [Exemple WRAT important] |
django_mongo [2024/06/17 16:57] (actual) david_lozano [Django amb MongoDB] |
||
---|---|---|---|
Línia 1: | Línia 1: | ||
====== Django amb MongoDB ====== | ====== 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 les xarxes | + | 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 |
Referències: | Referències: | ||
Línia 8: | Línia 8: | ||
* PyMongo [[https:// | * PyMongo [[https:// | ||
* Article sobre [[https:// | * Article sobre [[https:// | ||
+ | * [[Django i MongoDB CRUD]] | ||
{{tag> #FpInfor #Dam #DamMp06 # | {{tag> #FpInfor #Dam #DamMp06 # | ||
Línia 13: | Línia 14: | ||
\\ | \\ | ||
+ | ===== 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 | ||
- | ===== Exemple blog de codi desplegat ===== | + | Es a dir, bàsicament, l'ORM de Django mapeja funcions a consultes SQL i així és com llegim, escrivim |
- | --> Proposta implementació Event# | + | Això no vol dir no que puguem treballar amb MongoDB. Tenim eines que ens permeten connectar-nos |
- | Mostrem aquí un exemple de '' | + | |
- | <file python | + | * **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 |
- | # models Lliga, Equip, Jugador, Partit... | + | * **PyMongo** : PyMongo és el controlador estàndard mitjançant el qual MongoDB pot interactuar amb Django. És la forma oficial i preferida d' |
- | class Event(models.Model): | + | ===== Djongo |
- | # el tipus d' | + | 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, |
- | class EventType(models.TextChoices): | + | |
- | GOL = " | + | |
- | AUTOGOL | + | |
- | FALTA = " | + | |
- | PENALTY | + | |
- | MANS = " | + | |
- | CESSIO | + | |
- | FORA_DE_JOC | + | |
- | ASSISTENCIA | + | |
- | TARGETA_GROGA | + | |
- | TARGETA_VERMELLA | + | |
- | | + | |
- | temps = models.TimeField() | + | |
- | tipus = models.CharField(max_length=30,choices=EventType.choices) | + | |
- | jugador = models.ForeignKey(Jugador,null=True, | + | |
- | on_delete=models.SET_NULL, | + | |
- | related_name=" | + | |
- | equip = models.ForeignKey(Equip, | + | |
- | on_delete=models.SET_NULL) | + | |
- | # per les faltes | + | |
- | jugador2 = models.ForeignKey(Jugador, | + | |
- | on_delete=models.SET_NULL, | + | |
- | related_name=" | + | |
- | detalls = models.TextField(null=True, | + | |
- | </ | + | |
- | <-- | + | |
- | \\ | + | 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 = { | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | } | ||
+ | } | ||
- | ===== Exemple Codi Online ===== | + | Si la vostra base de dades no es troba a localhost o està protegida, també hauríeu d' |
- | Crearem un projecte Django i provarem si funciona simplement amb: | + | DATABASES |
- | (env) $ django-admin startproject myproject | + | ' |
- | | + | ' |
- | | + | ' |
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | | ||
+ | } | ||
+ | | ||
- | I per comprovar-ho accedeix amb el navegador a '' | + | Assegureu-vos que el nom de l'aplicació s'afegeix a la configuració INSTALLED_APPS del vostre settings.py: |
+ | INSTALLED_APPS = [ | ||
+ | | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ] | ||
- | Si volem endinsar-nos a la programació amb Django es recomana seguir | + | Ara que tenim el projecte (i l'aplicació) Django, podeu crear les col·leccions a MongoDB mitjançant les ordres: |
+ | python manage.py makemigrations < | ||
+ | python manage.py migrate | ||
- | \\ | + | I podeu continuar fent servir el Django Admin. |
- | ===== Exemple Wrap important ===== | + | Tot és fàcil |
- | Anem a Github (o a Gitlab, Bitbucket, etc.) i fem [[Git#crear un nou repositori]]. Si ho feu a la web, ella mateix ens donarà la " | + | |
<WRAP important> | <WRAP important> | ||
- | No pugeu res al repositori remot fins que hagueu configurat correctament el projecte amb el '' | + | **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 |
+ | |||
+ | **Djongo actualment té molt poc suport** a incidències que s' | ||
+ | |||
+ | **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. | ||
- | En particular, prengueu cura de no fer cap '' | ||
</ | </ | ||
- | Teniu articles amb informació extensa sobre el [[VCS|sistema de control de versions]] | + | Continua sent una eina molt potent |
- | ===== Exemple Wrap info ===== | ||
- | <WRAP info> | + | ===== Connecteu Django i MongoDB mitjançant PyMongo ===== |
- | Podeu llegir referències sobre els potents formularis | + | |
+ | PyMongo és el controlador natural per connectar-nos | ||
+ | pip install pymongo[snappy, | ||
+ | |||
+ | A continuació teniu un exemple de codi per a la connexió i les funcionalitats CRUD bàsiques: | ||
+ | |||
+ | --> 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: | ||
+ | |||
+ | <file python exemple.py> | ||
+ | |||
+ | import pymongo | ||
+ | # | ||
+ | |||
+ | from django.conf import settings | ||
+ | my_client = pymongo.MongoClient(connect_string) | ||
+ | |||
+ | # First define the database name | ||
+ | dbname = my_client[' | ||
+ | |||
+ | # 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[" | ||
+ | |||
+ | #let's create two documents | ||
+ | medicine_1 = { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | medicine_2 = { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | # Insert the documents | ||
+ | collection_name.insert_many([medicine_1, | ||
+ | # 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[" | ||
+ | # Update one document | ||
+ | update_data = collection_name.update_one({' | ||
+ | |||
+ | # Delete one document | ||
+ | delete_data = collection_name.delete_one({' | ||
+ | </ | ||
+ | <-- | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Treballant d' | ||
+ | |||
+ | Ok, amb això no tindré problemes però: | ||
+ | |||
+ | <WRAP important> | ||
+ | **Adeu a l'ORM de Django**, haureu de fer les vostres consultes des de zero, així que oblideu-vos de tot el que sabeu sobre la " | ||
+ | |||
+ | **Adeu a aquest Admin tan xulo** treballa fent crides a l'ORM, per tant, veig difícil poder-ho adaptar fàcilment ara per ara. | ||
+ | |||
+ | **Adeu a les migracions i la validació dels models automàtica**, | ||
</ | </ | ||
- | ===== Exemple Wrap Todo ===== | + | Tot i en aquestes condicions encara Django és un framework bo per treballar, però no prou per plantejar-te si és la millor opció disponible per treballar amb MongoDB. **Quina proposes tu?** |
+ | |||
+ | ===== Exercici proposat | ||
<WRAP todo> | <WRAP todo> | ||
- | **Formularis** | + | Instal·lat el MongoDB al teu dispositiu i adapta l' |
+ | |||
+ | Fes proves de totes les funcionalitats del tutorial: **Models, Admin, Migrations, Fakers**… | ||
- | Elabora formularis per: | + | **Comenta |
- | - Crear lliga. | + | |
- | | + | |
- | | + | |
- | - Crear equip. | + | |
- | - Assignar equips a una lliga (afegir o treure). | + | |
</ | </ |