Het doel van deze zelfstudie over het programmeren van Python-databases is om een voorzichtige introductie te geven in het gebruik van een NoSQL-database als gegevensarchief voor Python-toepassingen. De beoogde doelgroep zijn ontwikkelaars op beginnersniveau of ontwikkelaars op gemiddeld niveau die bekend zijn met het gebruik van SQL-georiënteerde databases zoals Oracle, SQL Server of MySQL. De demonstraties in dit artikel zullen parallel lopen met de demonstraties die worden gebruikt in andere SQL Database-programmeerartikelen waarbij Python betrokken is, zoals Python Database Programming with SQL Express for Beginners, en zullen eveneens Python 3 gebruiken.
Wat is NoSQL?
De populariteit van Python blijft groeien, deels vanwege het gemak waarmee het met nieuwe technologieën kan werken. Een van die 'nieuwe' technologie is het gebruik van 'NoSQL'-databases. Een van de aantrekkelijkste kenmerken van dit soort databases is het feit dat er, zoals de naam al aangeeft, over het algemeen geen extra zoektaal is, zoals een van de schijnbaar vele varianten van SQL, die moet worden geleerd om met de database te kunnen werken vanuit een programmatisch standpunt. Dit vereenvoudigt de applicatie-ontwikkeling enorm omdat de native datastructuren van de programmeertaal en de syntaxis de de facto "query-taal" zijn, op voorwaarde natuurlijk dat de juiste modules aan de ontwikkelomgeving worden toegevoegd.
NoSQL-databases, naast meestal gebruik geen querytaal, structureer gegevens ook intern op een manier die aanzienlijk verschilt van SQL-databases. Een ontwikkelaar die meer gewend is aan het SQL-programmeerparadigma, moet zijn of haar denkwijze aanpassen aan de manier waarop NoSQL zaken doet. Het ontwerp van NoSQL-databaseservers gaat verder onder de motorkap en deelt dezelfde ongelijkheid. NoSQL-databaseservers zijn meer gericht op snelheid en schaalbaarheid met "uiteindelijke consistentie", in tegenstelling tot SQL-databaseservers die meer gericht zijn op onmiddellijke consistentie.
Wat is MongoDB?
MongoDB is een van de vele "NoSQL" -databases. Net als MariaDB gebruikt het zijn eigen gebruikersnaam en wachtwoordsysteem voor toegangsbeheer. MongoDB biedt niet alleen gratis downloadbare serversoftware, maar ook een gratis cloudgebaseerde introductieoptie (via de Atlas aanbod), waardoor de noodzaak voor het downloaden en configureren van een instantie wordt verminderd. De demonstraties in deze zelfstudie over het programmeren van databases maken gebruik van de door de cloud gehoste gratis instantie van MongoDB.
Zoals het geval is met Python en elke databaseserver, een extra databasestuurprogrammamodule, namelijk PyMongo , is vereist voor Python om te communiceren met de MongoDB-server en alle databases die zich daarin bevinden. Bovendien biedt MongoDB, net als elke andere databaseserver, een bijbehorende beheertool genaamd MongoDB Shell . De demonstraties in dit artikel gebruiken een MongoDB-database die met deze tool is gemaakt. Merk op dat MongoDB Shell een van de vele beheertools is die voor MongoDB bestaan.
- MongoDB Community Server downloaden
- MongoDB gratis cloudgebaseerd introductieaanbod
- MongoDB Shell-download
Houd er rekening mee dat de geplaatste links actief waren op het moment dat dit artikel werd geschreven. Als de links niet meer actief zijn, kunnen deze producten worden gedownload via de zoekmachine van uw voorkeur.
MongoDB configureren voor softwareontwikkeling
Het Zero-Cost Cloud-gebaseerde introductieaanbod van MongoDB configuratie is volledig webgebaseerd. Het kan gemakkelijk worden gekoppeld aan iemands Google-account voor eenmalige aanmelding. Houd rekening met de volgende kanttekeningen:
- Kies een datahostingservice die fysiek in de buurt is. De hostingservice die in dit artikel wordt getoond en die zich in Virginia bevindt, is misschien niet ideaal voor iemand die daar ver vandaan is.
- Het wachtwoord dat wordt gebruikt om een toepassing met de databaseserver te verbinden, moet veilig worden opgeslagen, omdat het niet kan worden hersteld als het kwijtraakt. Het kan alleen worden gereset.
- De clusternaam kan, eenmaal ingesteld, niet worden gewijzigd. De demonstraties in dit artikel gebruiken een cluster met de naam Cluster0 .
- Zorg ervoor dat elk IP-adres van waaruit een toepassing, inclusief MongoDB Shell, is geconfigureerd in de beveiligingsinstellingen.
- De MongoDB Shell heeft mogelijk geen installatieprogramma. Zorg er altijd voor dat u het pad naar de map die deze toepassing bevat, opneemt in het pad van het besturingssysteem.
Hoe verbinding te maken met de MongoDB-databaseserver
Na het succesvol configureren van het cloudgebaseerde MongoDB-cluster, moet u de specifieke verbindingsreeks noteren die is gebruikt om er verbinding mee te maken. De onderstaande strings kunnen ook worden opgehaald door in te loggen op MongoDB Atlas Site en te klikken op Verbinden knop:
Figuur 1 – het MongoDB Atlas-dashboard met de Connect-knop gemarkeerd
Let op, instellingen zoals de gebruikersnaam en het wachtwoord van de database en toegestane IP-bereiken voor verbinding kunnen respectievelijk worden ingesteld in de koppelingen Databasetoegang en Netwerktoegang.
Hieronder staan twee aansluitvoorbeelden. De eerste is voor MongoDB Shell.
MongoDB:verbinding maken vanaf de opdrachtregel
Een Windows-opdrachtprompt openen wordt uitgelegd in Python Database Programming with SQL Express for Beginners onder de Opening Command Prompt Windows kop.
Figuur 2 – Verbinding maken via de opdrachtregel met MongoDB Shell
Merk op dat de opdracht om de MongoDB Shell te openen, verschilt per besturingssysteem. De clusternaam kan variëren en de gemarkeerde parameters in de opdracht moeten worden gewijzigd in de details van de cloudgebaseerde MongoDB-installatie. In Windows heet deze opdracht mongosh . Merk op dat de databasenaam RazorDemo is hieronder opgenomen, aangezien dat de database is die zal worden gebruikt in de demonstraties in deze programmeerhandleiding. De opdracht accepteert ook een extra parameter voor het wachtwoord, zoals hieronder weergegeven:
Figuur 3 – Authenticatie met het wachtwoord in de opdrachtregel.
Let op, hoewel het voor ontwikkelingsdoeleinden handig is om het wachtwoord in de opdrachtregel te gebruiken, in plaats van het telkens opnieuw te moeten typen, moet u er rekening mee houden dat het wachtwoord wordt weergegeven in de geschiedenis van eerder uitgevoerde opdrachten. Deze optie mag niet worden gebruikt in ontwikkelomgevingen waar andere gebruikers toegang hebben tot iemands eerdere opdrachtgeschiedenis.
En hopelijk had niemand gedacht dat ik 123456 . zou gebruiken als een wachtwoord, toch?
Figuur 4 – Even controleren 🙂
Merk op dat in beide bovenstaande voorbeelden de ^ teken wordt gebruikt als een lijnvervolgsymbool in de Windows-opdrachtprompt.
MongoDB verbinden vanuit Python
De volgende tekenreeks, met geschikte wijzigingen, kan in Python-code worden geplaatst voor gebruik door de PyMongo chauffeur:
Figuur 5 – Verbinding maken via Python en PyMongo
In de verbindingsreeks hierboven, de databasenaam RazorDemo wordt gebruikt in plaats van myFirstDatabase .
Een database maken in MongoDB
MongoDB "creëert" geen database totdat die database is "gebruikt" en er daadwerkelijk gegevens in worden geschreven. De onderstaande afbeelding toont een succesvolle verbinding met de MongoDB Atlas-service met behulp van de RazorDemo database, maar een dergelijke database wordt niet vermeld bij gebruik van de show dbs commando:
Figuur 6 – Nog geen RazorDemo-database...
Een database "gebruiken" in MongoDB
In MongoDB wordt een database "gebruikt" wanneer deze ofwel rechtstreeks is verbonden met de queryreeks of wanneer de databasenaam het argument is van de use opdracht. Merk op dat het aanroepen van dit commando op de momenteel geselecteerde database een ander bericht weergeeft dan het overschakelen naar die database:
Figuur 7 – Schakelen tussen databases
Om de database daadwerkelijk te "creëren", moeten enkele gegevens worden ingevoegd. De RazorDemo database uit de vorige artikelen, Aan de slag met Razor-pagina's met C# en Python Databaseprogrammering met SQL Express voor beginners, gebruikt twee tabellen, namelijk Artiesten en Albums . In MongoDB wordt wat een SQL-georiënteerde database een tabel noemt een verzameling genoemd . Twee items maken in collecties met de naam Artiesten en Albums , zal respectievelijk zowel de database als de collecties creëren.
Elk item in een verzameling wordt een document genoemd . Dit is analoog aan een record in een SQL-georiënteerde databasetabel.
Let op, net zoals het voor een grote applicatie belangrijk is om de tabel aanmaken . op te slaan instructies in een SQL-georiënteerde database, is dezelfde redenering ook van toepassing op de initiële database- en verzamelingsaanmaakopdrachten voor een MongoDB-database voor een belangrijke toepassing.
Met de onderstaande opdrachten worden de Artiesten . gemaakt verzameling door er een enkel document in te voegen en vervolgens de Artiesten . op te vragen collectie om het succes van de invoegbewerking te verifiëren. Merk op hoe de invoegbewerking de JSON-syntaxis gebruikt:
db.Artists.insertOne({artist_name: "Skeered Tigon Stripes"}) db.Artists.find({}) Listing 1 - Inserting a new document.
Deze commando's geven de volgende output in MongoDB Shell:
Figuur 8 – De Artists-collectie maken
De _id hierboven is automatisch gemaakt en is uniek binnen de collectie, vergelijkbaar met een automatisch gegenereerde primaire sleutelwaarde in een SQL-georiënteerde database.
Let op, MongoDB Shell kan melden dat de .insert() commando wordt afgeraden. Dit voorbeeld gebruikt de .insertOne() commando, want dat is een van de aangeboden alternatieven.
Een vergelijkbare syntaxis kan worden gebruikt om de Albums . te maken collectie:
db.Albums.insertOne({artist_name: "Skeered Tigon Stripes",album_name: "Genetically Engineered Critters"}) db.Albums.find({}) Listing 2 - Inserting another new document
Figuur 9 – De verzameling albums maken
Let op, de waarschuwing met betrekking tot caniuse-lite verschijnt wanneer u op Enter . drukt toets voordat u de opdracht voltooit om een document te maken. MongoDB Shell zorgt ervoor dat een opdracht over meerdere regels kan worden gebroken voordat deze wordt voltooid. Deze waarschuwing geeft aan dat MongoDB Shell mogelijk een verouderd stuurprogramma gebruikt en dat het in een toekomstige release moet worden bijgewerkt.
Het lijkt het proces voor het maken van documenten niet te verbreken.
Nog wat documenten voor de Albums collectie:
db.Albums.insertOne({ artist_name: "Skeered Tigon Stripes", album_name: "Volume Control: No" }) db.Albums.insertOne({ artist_name: "Skeered Tigon Stripes", album_name: "Verse Vica }) db.Albums.insertOne({ artist_name: "Skeered Tigon Stripes", album_name: "Rotten to the Core" }) db.Albums.find({}) Listing 3 - Additional documents for the Albums collection
Figuur 10 – Nieuwe aanvullende albumdocumenten
GEEN beperkingen voor externe sleutels
Aangezien MongoDB geen relationeel databasebeheersysteem is, biedt het geen mechanisme voor het afdwingen van de soorten externe-sleutelbeperkingen die worden gebruikt in SQL-georiënteerde databasetabellen tussen verzamelingen. Het verwacht dat de toepassing dergelijke relaties onderhoudt en afdwingt. In de context van MongoDB Shell is het de plicht van de ontwikkelaar om de waarden correct in te voeren om ervoor te zorgen dat een relatie tussen de documenten in de collecties kan worden afgeleid.
De .deleteOne() commando kan worden gebruikt om verkeerd ingevoerde documenten te verwijderen:
db.Albums.deleteOne({ artist_name: "Skeered Tigon Stripes", album_name: "I Typed the Album Name Wrong" }) Listing 4 - Deleting a document.
Houd er rekening mee dat, als een document niet overeenkomt met de ingevoerde parameters, er geen fout wordt weergegeven, maar dat het bevestigingsbericht aangeeft dat er niets is verwijderd:
Figuur 11 – Bevestigingsbericht met geen verwijderde documenten
De .deleteMany() commando kan worden gebruikt om meerdere records te verwijderen die voldoen aan een JSON-criterium. De onderstaande opdracht verwijdert alle documenten in de Albums-collecties waarin de artiest_naam waarde is niet Skeered Tigon Stripes :
db.Albums.deleteMany({artist_name: {$ne : "Skeered Tigon Stripes" }}) Listing 5 - Deleting multiple documents based on criteria.
Figuur 12 – Meerdere records verwijderen
Laatste gedachten over het programmeren van Python-databases met MongoDB
Nu we hebben geleerd hoe we verbinding kunnen maken met een MongoDB-database en hoe we een GEEN SQL-versie van een tabel met "records" kunnen maken, kunnen we verder gaan met het werken met Python-scripts om gegevens in onze MongoDB-database in te voegen. We zullen die discussie voortzetten in het tweede – en laatste – deel van deze Python-handleiding voor het programmeren van databases:Python en MongoDB Database Development.