sql >> Database teknologi >  >> NoSQL >> MongoDB

Python-databaseprogrammering med MongoDB for begyndere

Formålet med denne Python-databaseprogrammeringsvejledning er at give en skånsom introduktion til brugen af ​​en NoSQL-database som et datalager for Python-applikationer. Den tilsigtede målgruppe er udviklere på begynderniveau eller udviklere på mellemniveau, der er fortrolige med at bruge SQL-orienterede databaser såsom Oracle, SQL Server eller MySQL. Demonstrationerne i denne artikel vil være parallelle med demonstrationerne, der bruges i andre programmeringsartikler i SQL Database, der involverer Python, såsom Python Database Programmering med SQL Express for begyndere, og vil ligeledes bruge Python 3.

Hvad er NoSQL?

Pythons popularitet fortsætter med at vokse i popularitet, delvist på grund af den lethed, som den kan arbejde med nye teknologier. En sådan "ny" teknologi er brugen af ​​"NoSQL"-databaser. En af de mest tiltalende egenskaber ved disse typer databaser er det faktum, at der, som navnet antyder, generelt ikke er noget ekstra forespørgselssprog, såsom en af ​​tilsyneladende mange varianter af SQL, der skal læres for at kunne arbejde med databasen fra et programmatisk synspunkt. Dette letter applikationsudviklingen i høj grad, fordi programmeringssprogets native datastrukturer og dets syntaks er de facto "forespørgselssprog", forudsat naturligvis at de relevante moduler føjes til udviklingsmiljøet.

NoSQL-databaser, ud over for det meste ikke bruger et forespørgselssprog, strukturerer også data internt på en måde, der er væsentligt ulig SQL-databaser. En udvikler, der er mere vant til SQL-programmeringsparadigmet, skal tilpasse sin tankegang, så den matcher, hvordan NoSQL driver forretning. Går vi længere under motorhjelmen, deler designet af NoSQL-databaseservere den samme ulighed. NoSQL-databaseservere er mere fokuserede på hastighed og skalerbarhed med "eventuel konsistens", i modsætning til SQL-databaseservere, der fokuserer mere på øjeblikkelig konsistens.

Hvad er MongoDB?

MongoDB er en af ​​mange "NoSQL"-databaser. Ligesom MariaDB bruger den sit eget brugernavn og adgangskodesystem til adgangsstyring. MongoDB tilbyder, udover at tilbyde gratis downloadbar serversoftware, også en gratis skybaseret introduktionsmulighed (via dets Atlas tilbyder), hvilket mindsker behovet for at downloade og konfigurere en instans. Demonstrationerne i denne databaseprogrammeringsvejledning vil bruge den cloud-hostede gratis forekomst af MongoDB.

Som det er tilfældet med Python og enhver databaseserver, et ekstra databasedrivermodul, nemlig PyMongo , er påkrævet for at Python kan kommunikere med MongoDB-serveren og eventuelle databaser indeholdt i den. Ydermere, som enhver databaseserver, tilbyder MongoDB et ledsagende administrationsværktøj kaldet MongoDB Shell . Demonstrationerne i denne artikel vil bruge en MongoDB-database oprettet ved hjælp af dette værktøj. Bemærk, at MongoDB Shell er et af mange administrationsværktøjer, der findes til MongoDB.

  • MongoDB Community Server Download
  • MongoDB Zero-Cost Cloud-baseret introduktionstilbud
  • MongoDB Shell Download

Bemærk venligst, at de opslåede links var aktive på det tidspunkt, denne artikel blev skrevet. Hvis linkene ikke længere er aktive, kan disse produkter downloades via ens foretrukne søgemaskine.

Sådan konfigureres MongoDB til softwareudvikling

MongoDB Zero-Cost Cloud-baseret introduktionstilbud konfigurationen er helt webbaseret. Det kan bekvemt linkes til ens Google-konto med henblik på single-logon. Bare husk følgende forbehold:

  • Vælg en datahostingtjeneste, der er fysisk i nærheden. Hostingtjenesten vist i denne artikel, som er i Virginia, er muligvis ikke ideel for nogen, der er langt væk derfra.
  • Den adgangskode, der bruges til at forbinde en applikation til databaseserveren, skal gemmes sikkert, da den ikke kan gendannes, hvis den går tabt. Det kan kun nulstilles.
  • Klyngenavnet, når først det er indstillet, kan ikke ændres. Demonstrationerne i denne artikel vil bruge en klynge ved navn Klynge0 .
  • Sørg for, at enhver IP-adresse, hvorfra enhver applikation, inklusive MongoDB Shell, er konfigureret i sikkerhedsindstillingerne.
  • MongoDB Shell har muligvis ikke et installationsprogram. Sørg altid for at inkludere stien til den mappe, der indeholder dette program, i stien til operativsystemet.

Sådan opretter du forbindelse til MongoDB-databaseserveren

Efter succesfuld konfiguration af den Cloud-baserede MongoDB-klynge, vil det være nødvendigt at notere den særlige forbindelsesstreng, der bruges til at oprette forbindelse til den. Strengene nedenfor kan også hentes ved at logge ind på MongoDB Atlas-webstedet og klikke på Forbind knap:

Figur 1 – MongoDB Atlas Dashboard med Connect-knappen fremhævet

Bemærk, indstillinger såsom databasebrugernavn og adgangskode og tilladte IP-intervaller for forbindelse kan indstilles i henholdsvis databaseadgang og netværksadgang links.

Nedenfor er to tilslutningseksempler. Den første er til MongoDB Shell.

MongoDB:Opretter forbindelse fra kommandolinjen

Åbning af en Windows kommandoprompt er forklaret i Python-databaseprogrammering med SQL Express for begyndere under Åbning af kommandoprompt-vinduer overskrift.

Figur 2 – Forbindelse via kommandolinjen til MongoDB Shell

Bemærk, at kommandoen til at åbne MongoDB Shell vil variere efter operativsystem. Klyngenavnet kan variere, og de fremhævede parametre i kommandoen skal ændres til detaljerne for den skybaserede MongoDB-opsætning. I Windows kaldes denne kommando mongosh . Bemærk, at databasenavnet RazorDemo er inkluderet nedenfor, da det er den database, der vil blive brugt i demonstrationerne i denne programmeringsvejledning. Kommandoen accepterer også en ekstra parameter for adgangskoden som vist nedenfor:

Figur 3 – Godkendelse med adgangskoden på kommandolinjen.

Bemærk, selvom det er praktisk til udviklingsformål at bruge adgangskoden på kommandolinjen, i modsætning til at skulle indtaste den hver gang, skal du være opmærksom på, at adgangskoden dukker op i historikken for tidligere udførte kommandoer. Denne mulighed bør ikke bruges i udviklingsmiljøer, hvor andre brugere kan få adgang til ens tidligere kommandohistorik.

Forhåbentlig var der heller ingen, der troede, at jeg rent faktisk ville bruge 123456 som en adgangskode, ikke?

Figur 4 – Tjekker lige 🙂

Bemærk, at i begge eksempler ovenfor er ^ tegn bruges som et linjefortsættelsessymbol i Windows kommandoprompt.

Tilslutning af MongoDB fra Python

Den følgende streng, med passende ændringer, kan placeres i Python-koden til brug af PyMongo driver:

Figur 5 – Tilslutning via Python og PyMongo

I forbindelsesstrengen ovenfor, databasenavnet RazorDemo vil blive brugt i stedet for myFirstDatabase .

Sådan opretter du en database i MongoDB

MongoDB "opretter" ikke en database, før den database er "brugt", og data faktisk er skrevet ind i den. Billedet nedenfor viser en vellykket forbindelse til MongoDB Atlas-tjenesten ved hjælp af RazorDemo database, men der er ingen sådan database på listen, når du bruger show dbs kommando:

Figur 6 – Ingen RazorDemo-database... endnu

Sådan "bruger" du en database i MongoDB

I MongoDB "bruges" en database, når den enten er forbundet direkte ved hjælp af forespørgselsstrengen, eller når databasenavnet er argumentet for brug kommando. Bemærk, hvordan påkaldelse af denne kommando på den aktuelt valgte database viser en anden besked end at skifte til den database:

Figur 7 – Skift mellem databaser

For rent faktisk at "oprette" databasen, skal nogle data indsættes. RazorDemo database fra de tidligere artikler, Getting Started With Razor Pages Using C# og Python Database Programming with SQL Express for Beginners, bruger to tabeller, nemlig Kunstnere og Albums . I MongoDB omtales det, en SQL-orienteret database kalder en tabel som en samling . Oprettelse af to poster i samlinger med navnet Kunstnere og Albums , vil henholdsvis oprette både databasen og samlingerne.

Hver post i en samling omtales som et dokument . Dette er analogt med en post i en SQL-orienteret databasetabel.

Bemærk, ligesom det er vigtigt for et større program at gemme opret-tabellen sætninger i en SQL-orienteret database, vil den samme begrundelse også gælde for de indledende kommandoer til oprettelse af database og samlinger for en MongoDB-database til en større applikation.

Kommandoerne nedenfor vil skabe Kunstnerne samling ved at indsætte et enkelt dokument i den, og forespørg derefter Kunstnerne indsamling for at verificere succesen af ​​indsættelsesoperationen. Bemærk, hvordan indsættelsesoperationen bruger JSON-syntaks:

db.Artists.insertOne({artist_name: "Skeered Tigon Stripes"})

db.Artists.find({})

Listing 1 - Inserting a new document.

Disse kommandoer giver følgende output i MongoDB Shell:

Figur 8 – Oprettelse af kunstnersamlingen

_id vist ovenfor blev automatisk oprettet og er unik i samlingen, svarende til en automatisk genereret primær nøgleværdi i en SQL-orienteret database.

Bemærk, MongoDB Shell kan rapportere, at .insert() kommandoen er forældet. Dette eksempel bruger .insertOne() kommando, da det er et af de angivne alternativer.

Lignende syntaks kan bruges til at oprette Album samling:

db.Albums.insertOne({artist_name: "Skeered Tigon Stripes",album_name: "Genetically Engineered Critters"})

db.Albums.find({})

Listing 2 - Inserting another new document

Figur 9 – Oprettelse af albumsamlingen

Bemærk, advarslen relateret til caniuse-lite vises, når du trykker på Enter tasten, før du udfører kommandoen for at oprette et dokument. MongoDB Shell vil tillade, at en kommando kan brydes på tværs af flere linjer, før den fuldføres. Denne advarsel indikerer, at MongoDB Shell muligvis bruger en forældet driver, og at den skal opdateres i en fremtidig udgivelse.

Det ser ikke ud til at bryde dokumentoprettelsesprocessen.

Nogle flere dokumenter til Album samling:

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

Figur 10 – Nye ekstra albumdokumenter

INGEN fremmednøglebegrænsninger

Da MongoDB ikke er et relationelt databasestyringssystem, giver det ikke en mekanisme til at håndhæve den slags fremmednøglebegrænsninger, der bruges i SQL-orienterede databasetabeller mellem samlinger. Den forventer, at applikationen opretholder og håndhæver sådanne relationer. I forbindelse med MongoDB Shell påhviler det udvikleren at indtaste værdierne korrekt for at sikre, at der kan udledes en sammenhæng mellem dokumenterne i samlingerne.

.deleteOne() kommandoen kan bruges til at slette forkert indtastede dokumenter:

db.Albums.deleteOne({ artist_name: "Skeered Tigon Stripes", album_name: "I Typed the Album Name Wrong" })
Listing 4 - Deleting a document.

Bemærk, at hvis et dokument ikke matcher de indtastede parametre, vil der ikke blive vist nogen fejl, i stedet vil bekræftelsesmeddelelsen vise, at intet blev slettet:

Figur 11 – Bekræftelsesmeddelelse, der viser ingen slettede dokumenter

.deleteMany() kommandoen kan bruges til at slette flere poster, der matcher et JSON-kriterie. Kommandoen nedenfor sletter alle dokumenter i albumsamlingerne, hvori kunstnernavn værdien er ikke Skeered Tigon Stripes :

db.Albums.deleteMany({artist_name: {$ne : "Skeered Tigon Stripes" }})

Listing 5 - Deleting multiple documents based on criteria.

Figur 12 – Sletning af flere poster

Sidste tanker om Python-databaseprogrammering med MongoDB

Nu hvor vi har lært, hvordan man forbinder til en MongoDB-database, og hvordan man opretter en NO SQL-version af en tabel med "records", kan vi gå videre til at arbejde med Python-scripts for at indsætte data i vores MongoDB-database. Vi vil fortsætte denne diskussion i den anden – og sidste – del af denne Python-databaseprogrammeringsvejledning:Python og MongoDB Database Development.


  1. Forskelle mellem Microsoft.Extensions.Cashing.Redis og Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache

  2. Problem med at deserialisere redis-cache til objekter i Spring-boot

  3. Forespørger MongoDB GridFS?

  4. MongoDB - Aggregation - For at få unikke genstande i array