Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Següent revisió | Revisió prèvia | ||
django_mongo [2023/06/23 08:47] david_lozano creat |
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 | ||
- | ===== Introducció per a DevOps ===== | + | Es a dir, bàsicament, |
- | Desenvolupar un projecte (en Django | + | 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ó: |
- | Prepar un projecte Django per a què sigui segur implica diverses coses: | + | * **Djongo** |
- | - Configurar un virtualenv | + | |
- | - Crear el projecte | + | |
- | - Tenir el projecte sota un [[VCS]] (sistema | + | |
- | - Configurar | + | |
- | - Habilitar configuració | + | |
- | - Fer un README per facilitar la clonació | + | |
- | - Configurar la BD adequadament. | + | |
- | - Configurar | + | |
- | | + | |
- | \\ | + | ===== 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. | ||
- | ===== Entorn Python Venv ===== | + | Si ja tens un projecte amb una base de dades SQL, instal·leu Djongo: |
- | Per treballar en Python ens convé | + | pip install djongo |
+ | |||
+ | Ara, aneu a la carpeta del vostre projecte | ||
+ | DATABASES = { | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | } | ||
+ | } | ||
- | A l' | + | Si la vostra base de dades no es troba a localhost o està protegida, també hauríeu d' |
+ | DATABASES = { | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | } | ||
+ | } | ||
+ | } | ||
- | Resumidament, | + | Assegureu-vos que el nom de l'aplicació s' |
- | | + | |
- | $ source env/ | + | ' |
- | (env) $ pip install | + | ' |
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ] | ||
+ | Ara que tenim el projecte (i l' | ||
+ | python manage.py makemigrations < | ||
+ | python manage.py migrate | ||
- | ===== Crear projecte ===== | + | I podeu continuar fent servir el Django |
- | Crearem un projecte | + | |
- | (env) $ django-admin startproject myproject | + | |
- | (env) $ cd myproject | + | |
- | (env) $ ./manage.py runserver | + | |
- | I per comprovar-ho accedeix amb el navegador a '' | + | Tot és fàcil i meravellós però: |
- | Si volem endinsar-nos a la programació | + | <WRAP important> |
+ | **Djongo encara està en estat de proves**, és incomplet i només mapeja consultes bàsiques sense tenir en compte totes les funcionalitats. | ||
+ | |||
+ | **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. | ||
+ | |||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | |||
+ | 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({' | ||
+ | </ | ||
+ | <-- | ||
\\ | \\ | ||
- | ===== Crear repositori Git ===== | + | Treballant d' |
- | 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 " | + | |
+ | Ok, amb això no tindré problemes però: | ||
<WRAP important> | <WRAP important> | ||
- | No pugeu res al repositori remot fins que hagueu configurat correctament | + | **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 " |
- | En particular, prengueu cura de no fer cap '' | + | **Adeu a aquest Admin tan xulo** treballa fent crides |
- | </ | + | |
- | Teniu articles amb informació extensa sobre el [[VCS|sistema de control de versions]] | + | **Adeu a les migracions |
+ | </ | ||
- | ==== Configurar .gitignore ==== | + | Tot i en aquestes condicions encara Django és un framework bo per treballar, però no prou per plantejar-te |
- | Abans d' | + | |
- | En particular, NO volem que entrin | + | ===== Exercici proposat ===== |
- | * Arxius que continguin contrasenyes | + | <WRAP todo> |
- | * El fitxer | + | Instal·lat el MongoDB |
- | * Els arxius transitoris d' | + | |
- | | + | |
- | Una versió mínima dels arxius i carpetes que NO volem que es puguin al repo seria aquest: | + | Fes proves de totes les funcionalitats del tutorial: **Models, Admin, Migrations, Fakers**… |
- | <file .gitignore .gitignore> | + | **Comenta si has tingut algun problema i com el podries resoldre.** |
- | *.pyc | + | </WRAP> |
- | /env/ | + | |
- | /venv/ | + | |
- | /static/* | + | |
- | /media/* | + | |
- | .env | + | |
- | db.sqlite3 | + | |
- | .coverage | + | |
- | __pycache__ | + | |
- | </file> | + |