En databas är en abstraktion över ett operativsystems filsystem som gör det lättare för utvecklare att bygga applikationer som skapar, läser, uppdaterar och raderar beständiga data.

Varför behövs databaser?

På en hög nivå lagrar webbapplikationer data och presenterar den för användarna på ett bra sätt. Google lagrar till exempel data om vägar och tillhandahåller vägbeskrivningar för att ta sig från en plats till en annan genom att köra med hjälp av programmetMaps. Köranvisningar är möjliga eftersom uppgifterna lagras i ett strukturerat format.

Databaser gör strukturerad lagring tillförlitlig och snabb. De ger dig också ett mentalt ramverk för hur data ska sparas och hämtas i stället för att du måste räkna ut vad du ska göra med data varje gång du bygger en ny applikation.

Databaser är ett begrepp med många implementeringar, bland annat PostgreSQL, MySQL och SQLite. Det finns också icke-relationella databaser som kallas NoSQL-databaser. Läs mer i kapitlet om data eller se innehållsförteckningen för alla ämnen.

Relationella databaser

Den abstraktion för databaslagring som oftast används i Pythons webbutveckling är uppsättningar av relationella tabeller. Alternativa lagringsabstraktioner förklaras på NoSQL-sidan.

Relationella databaser lagrar data i en serie tabeller. Förbindelserna mellan tabellerna anges som främmande nycklar. En främmande nyckel är en unik referens från en rad i en relationell tabell till en annan rad i en tabell, som kan vara samma tabell men oftast är en annan tabell.

Databasers lagringsimplementationer varierar i komplexitet. SQLite, en databas som ingår i Python, skapar en enda fil för all data per databas.Andra databaser som PostgreSQL, MySQL, Oracle och Microsoft SQL Server har mer komplicerade system för persistens och erbjuder samtidigt ytterligare avancerade funktioner som är användbara för lagring av data i webbapplikationer. Dessa avancerade funktioner inkluderar men är inte begränsade till följande:

  1. datareplikering mellan en huvuddatabas och en eller flera skrivskyddade slavinstanser
  2. avancerade kolumntyper som effektivt kan lagra semistrukturerade data, t.ex. JavaScript Object Notation (JSON)
  3. sharding, vilket möjliggör horisontell skalning av flera databaser som var och en fungerar som skriv- och läsinstanser till priset av latens i datakonsistens
  4. övervakning, statistik och annan användbar körtidsinformation för databasscheman och tabeller

Typiskt sett startar webbapplikationer med en enda databasinstans, t.ex. PostgreSQL, med ett okomplicerat schema. Med tiden utvecklas databasschemat till en mer komplex struktur med hjälp av schemamigreringar och avancerade funktioner som replikering, sharding och övervakning blir mer användbara när databasutnyttjandet ökar baserat på programanvändarnas behov.

De vanligaste databaserna för Python-webbapplikationer

PostgreSQL ochMySQL är två av de vanligaste databaserna med öppen källkod för att lagra data i Python-webbapplikationer.

SQLite är en databas som lagras i en enda fil på disk. SQLite är inbyggt i Python men är endast byggt för åtkomst genom en enda anslutning åt gången. Därför rekommenderas starkt att inte köra en produktionswebbtillämpning med SQLite.

PostgreSQL-databas

PostgreSQL är den rekommenderade relationsdatabasen för arbete med Pythonwebbtillämpningar. PostgreSQL:s funktionsuppsättning, aktiva utveckling och stabilitet bidrar till att den används som backend för miljontals applikationer som lever på webben idag.

Lär dig mer om hur du använder PostgreSQL med Python på sidan om PostgreSQL.

MySQL-databas

MySQL är en annan lämplig databasimplementation med öppen källkod för Python-applikationer. MySQL har en något enklare inlärningskurva i början änPostgreSQL men är inte lika funktionsrik.

Hitta information om Python-tillämpningar med en MySQL-bakgrund på den dedikeradeMySQL-sidan.

Anslutning till en databas med Python

För att kunna arbeta med en relationsdatabas med hjälp av Python måste du använda ett kodbibliotek. De vanligaste biblioteken för relationsdatabaser är:

  • psycopg2(källkod)för PostgreSQL.

  • MySQLdb(källkod)för MySQL. Observera att utvecklingen av denna drivrutin är mestadels fryst så det är klokt att utvärdera alternativa drivrutiner om du använderMySQL som backend.

  • cx_Oracle förOracle Database (källkod).Oracle flyttade sinopen-källkod för drivrutinen från SourceForge till GitHub 2017.

SQLite-stödet är inbyggt i Python 2.7+ och ett separat bibliotek är därför inte nödvändigt. Du behöver bara ”importera sqlite3” för att börja använda den filbaserade databasen.

Objektrelationell mappning

Objektrelationella mappare (ORM) gör det möjligt för utvecklare att få tillgång till data från en baksida genom att skriva Pythonkod i stället för SQL-förfrågningar. Varje ramverk för webbapplikationer hanterar integrering av ORM:er på olika sätt. Det finns en hel sida om objektrelationella mappningar (ORMs) som du bör läsa för att få ett grepp om det här ämnet.

Databastjänster för tredje part

Några företag driver skalbara databasservrar som en värdtjänst.Värdade databaser kan ofta erbjuda automatiserad säkerhetskopiering och återställning, skärpta säkerhetskonfigurationer och enkel vertikal skalning, beroende på leverantör.

  • Amazon Relational Database Service (RDS)tillhandahåller förkonfigurerade MySQL- och PostgreSQL-instanser. Instanserna kan skalas till större eller mindre konfigurationer beroende på lagrings- och prestandabehov.

  • Google Cloud SQL är en tjänst med hanterade, säkerhetskopierade, replikerade och automatiskt patchade MySQL-instanser. CloudSQL integreras med Google App Engine men kan också användas oberoende.

  • BitCan tillhandahåller både MySQL- och MongoDB-värddatabaser med omfattande säkerhetskopieringstjänster.

  • ElephantSQL är ett företag som tillhandahåller mjukvara som en tjänst som är värd för PostgreSQL-databaser och hanterar serverkonfigurationen, säkerhetskopiering och dataanslutningar ovanpå Amazon Web Services-instanser.

SQL-resurser

Du kanske planerar att använda en objekt-relationsmappare (ORM) som ditt huvudsakliga sätt att interagera med en databas, men du bör ändå lära dig grunderna i SQL för att skapa scheman och förstå den SQL-kod som genereras av ORM:en. Följande resurser kan hjälpa dig att komma igång med SQL om du aldrig tidigare har använt det.

  • Select Star SQL är en interaktiv bok för att lära dig SQL. Den rekommenderas starkt även om du tror att du bara kommer att arbeta med en objektrelationell mapp i dina projekt eftersom du aldrig vet när du behöver gå in i SQL för att förbättra en genererad frågas långsamma prestanda.

  • En nybörjarguide till SQLförklarar på ett bra sätt de viktigaste nyckelorden i SQL-statements såsom SELECT, WHERE, FROM, UPDATE och DELETE.

  • SQL Tutorial lär ut SQL-grunderna som kan användas i alla större implementationer av relationsdatabaser.

  • Life of a SQL queryeförklarar vad som händer både begreppsmässigt och tekniskt i en databas när en SQL-fråga körs. Författaren använder PostgreSQL som exempeldatabas och SQL-syntax i hela inlägget.

  • En förmodligen ofullständig, omfattande guide till de många olika sätten att sammanlänka tabeller i SQL behandlar en av de knepigaste delarna när det gäller att skriva SQL-meddelanden som sammanlänkar en eller flera tabeller: JOIN.

  • Skrivning av bättre SQLär en kort kodstylingguide för att göra dina frågor lättare att läsa.

  • SQL Intermediate är en handledning som går bortom grunderna och som använder öppna data frånUS Consumer Financial Protection Bureau som exempel på hur man räknar, frågar och använder vyer i PostgreSQL.

Allmänna databasresurser

  • Hur fungerar en relationsdatabas är ett detaljerat långformat inlägg om sortering, sökning, sammanslagning och andra operationer som vi ofta tar för givet när vi använder en etablerad relationsdatabas som PostgreSQL.

  • Databaser 101 ger en översikt över de viktigaste relationella databasbegreppen som är relevant som introduktion även för icke-utvecklare.

  • Fem misstag som nybörjare gör när de jobbar med databaserförklarar varför man inte ska lagra bilder i databaser och varför man ska vara försiktig med hur man normaliserar sitt schema.

  • DB-Engines rankar de mest populära databashanteringssystemen.

  • DB Weekly är en veckovis sammanställning av allmänna databasartiklar och resurser.

  • Designing Highly Scalable Database Architectures behandlar horisontell och vertikal skalning, replikering och caching i relationella databasarkitekturer.

  • Online migrations at scaleär en bra läsning om hur man kan bryta ner komplexiteten i en databasschemamigrering för en operativ databas. Det tillvägagångssätt som författarens team använde var ett 4-stegs dubbelt skrivmönster för att noggrant utveckla hur data för prenumerationer lagrades så att de kunde flytta till en ny, mer effektiv lagringsmodell.

  • A one size fits all database doesn’t fit anyoneförklarar Amazon Web Services specifika skäl för att ha så många typer av relationella och icke-relationella databaser på sin plattform, men artikeln är också en bra översikt över olika databasmodeller och deras användningsområden.

  • SQL är 43 år gammalt – här är 8 anledningar till att vi fortfarande använder det idag listar varför SQL används av nästan alla utvecklare även när språket närmar sig sitt femtioårsjubileum.

  • SQL-nycklar på djupetger en bra förklaring till vad primära nycklar är och hur du bör använda dem.

  • Exploring a data set in SQLär ett bra exempel på hur enbart SQL kan användas för dataanalys. Den här handledningen använder Spotify-data för att visa hur man extraherar det man vill lära sig av en datamängd.

  • Strategier för testning av integrering av databaser täcker ett svårt ämne som dyker upp i alla projekt i den verkliga världen.

  • GitLab tillhandahöll sin postmortem av ett databasavbrott den 31 januari som ett sätt att vara transparent för kunderna och hjälpa andra utvecklingsteam att lära sig hur de förstörde sina databassystem och sedan hittade ett sätt att återhämta sig.

  • Asynkronous Python and Databasesär en djupgående artikel som täcker varför många Python-databasdrivare inte kan användas utan modifiering på grund av skillnaderna i blockerande kontra asynkrona händelsemodeller. Definitivt värt att läsa om du använderWebSockets via Tornado eller gevent.

  • PostgreSQL vs MS SQL Server är ett perspektiv på skillnaderna mellan de två databasservrarna från en dataanalytiker.

Kontrolllista för inlärning av databaser

  1. Installera PostgreSQL på din server. Om du antar att du valde Ubuntu runsudo apt-get install postgresql.

  2. Se till att psycopg2-biblioteket finns med i din applikations beroenden.

  3. Konfigurera din webbapplikation så att den ansluter till PostgreSQL-instansen.

  4. Skapa modeller i din ORM, antingen med Djangos inbyggda ORM ellerSQLAlchemy med Flask.

  5. Bygg dina databastabeller eller synkronisera ORM-modellerna med PostgreSQL-instansen, om du använder en ORM.

  6. Begynna att skapa, läsa, uppdatera och radera data i databasen från din webbapplikation.

Lämna ett svar

Din e-postadress kommer inte publiceras.