Un database è un’astrazione sopra il file system di un sistema operativo che rende più facile per gli sviluppatori costruire applicazioni che creano, leggono, aggiornano e cancellano dati persistenti.
- Perché sono necessari i database?
- Basi di dati relazionali
- I database più comuni per le applicazioni web Python
- Database PostgreSQL
- Base di dati MySQL
- Collegamento ad un database con Python
- Object-relational Mapping
- Servizi di terze parti per database
- Risorse SQL
- Risorse generali di database
- Lista di controllo per imparare i database
Perché sono necessari i database?
A un alto livello le applicazioni web memorizzano dati e li presentano agli utenti in modo utile. Per esempio, Google immagazzina dati sulle strade e fornisce indicazioni per andare da un luogo all’altro guidando attraverso l’applicazioneMaps. Le indicazioni di guida sono possibili perché i dati sono memorizzati in un formato strutturato.
I database rendono la memorizzazione strutturata affidabile e veloce. Ti danno anche una strutturamentale per come i dati dovrebbero essere salvati e recuperati invece di dover capire cosa fare con i dati ogni volta che costruisci una nuova applicazione.
Basi di dati relazionali
L’astrazione di memorizzazione di database più comunemente usata nello sviluppo web in Python è un insieme di tabelle relazionali. Astrazioni alternative di memorizzazione sono spiegate nella pagina NoSQL.
I database relazionali memorizzano i dati in una serie di tabelle. Le interconnessioni tra le tabelle sono specificate come chiavi esterne. Una chiave esterna è un riferimento univoco da una riga in una tabella relazionale a un’altra riga in una tabella, che può essere la stessa tabella ma è più comunemente una tabella diversa.
Le implementazioni di archiviazione dei database variano in complessità. SQLite, un database incluso in Python, crea un singolo file per tutti i dati per ogni database.Altri database come PostgreSQL, MySQL, Oracle e Microsoft SQL Server hanno schemi di persistenza più complicati mentre offrono ulteriori caratteristiche avanzate che sono utili per la memorizzazione dei dati delle applicazioni web. Queste caratteristiche avanzate includono, ma non sono limitate a:
- replicazione dei dati tra un database master e una o più istanze slave di sola lettura
- tipi di colonna avanzati che possono memorizzare in modo efficiente dati semi-strutturati come JavaScript Object Notation (JSON)
- sharding, che permette lo scaling orizzontale di più database che servono ciascuno come istanze di lettura-scrittura al costo della latenza nella consistenza dei dati
- monitoraggio, statistiche e altre utili informazioni runtime per gli schemi e le tabelle del database
Tipicamente le applicazioni web iniziano con una singola istanza di database come PostgreSQL con uno schema semplice. Con il tempo lo schema del database si evolve in una struttura più complessa usando le migrazioni dello schema e le caratteristiche avanzate come la replica, lo sharding e il monitoraggio diventano più utili quando l’utilizzo del database aumenta in base alle esigenze degli utenti dell’applicazione.
I database più comuni per le applicazioni web Python
PostgreSQL e MySQL sono due dei più comuni database open sourced per la memorizzazione dei dati delle applicazioni web Python.
SQLite è un database che è memorizzato in un singolo file su disco. SQLite è incorporato in Python, ma è costruito solo per l’accesso da una singola connessione alla volta. Perciò è altamente raccomandato di non eseguire un’applicazione web di produzione con SQLite.
Database PostgreSQL
PostgreSQL è il database relazionale raccomandato per lavorare con applicazioni web Python. Il set di caratteristiche di PostgreSQL, lo sviluppo attivo e la stabilità contribuiscono al suo utilizzo come backend per milioni di applicazioni che vivono sul Web oggi.
Impara di più sull’uso di PostgreSQL con Python sulla pagina PostgreSQL.
Base di dati MySQL
MySQL è un’altra valida implementazione di database open source per applicazioni Python. MySQL ha una curva di apprendimento iniziale leggermente più facile di PostgreSQL, ma non è così ricco di funzionalità.
Scopri le applicazioni Python con un appoggio a MySQL nella pagina dedicata a MySQL.
Collegamento ad un database con Python
Per lavorare con un database relazionale usando Python, hai bisogno di usare una libreria di codice. Le librerie più comuni per i database relazionali sono:
-
psycopg2 (codice sorgente) per PostgreSQL.
-
MySQLdb (codice sorgente) per MySQL. Si noti che lo sviluppo di questo driver è per lo più congelato, quindi è saggio valutare driver alternativi se si utilizza MySQL come backend.
-
cx_Oracle forOracle Database (codice sorgente).Oracle ha spostato il codice sorgente del driver iropen da SourceForge a GitHub nel 2017.
Il supporto SQLite è integrato in Python 2.7+ e quindi non è necessaria una libreria separata. Semplicemente “import sqlite3” per iniziare ad interfacciarsi con il database basato su file.
Object-relational Mapping
Gli object-relational mapper (ORM) permettono agli sviluppatori di accedere ai dati da un backend scrivendo codice Python invece che query SQL. Ogni framework di applicazioni web gestisce l’integrazione degli ORM in modo diverso. C’è un’intera pagina sull’object-relational mapping (ORM) che dovresti leggere per avere un’idea di questo argomento.
Servizi di terze parti per database
Numerose aziende eseguono server di database scalabili come servizio ospitato.I database ospitati possono spesso fornire backup e recupero automatici, configurazioni di sicurezza rafforzate e facile scalabilità verticale, a seconda del fornitore.
-
Amazon Relational Database Service (RDS) fornisce istanze MySQL e PostgreSQL preconfigurate. Le istanze possono essere scalate a configurazioni più grandi o più piccole in base alle esigenze di archiviazione e prestazioni.
-
Google Cloud SQL è un servizio con istanze MySQL gestite, sottoposte a backup, replicate e auto-patinate. CloudSQL si integra con Google App Engine ma può essere usato anche indipendentemente.
-
BitCan fornisce sia MySQL che MongoDB hosteddatabases con ampi servizi di backup.
-
ElephantSQL è una società di software-as-a-service che ospita database PostgreSQL e gestisce la configurazione del server, i backup e le connessioni dati sopra le istanze di Amazon Web Services.
Risorse SQL
Potreste pianificare di usare unobject-relational mapper (ORM) come modo principale di interagire con un database, ma dovreste comunque imparare le basi di SQL per creare schemi e capire il codice SQL generato dall’ORM. Le seguenti risorse possono aiutarvi ad aggiornarvi su SQL se non l’avete mai usato prima.
-
Select Star SQL è un libro interattivo per imparare SQL. Altamente raccomandato anche se pensate che lavorerete solo con una mapperon oggetto-relazionale nei vostri progetti, perché non sapete mai quando avrete bisogno di scendere in SQL per migliorare le lente prestazioni di una query generata.
-
Una guida per principianti a SQL fa un buon lavoro spiegando le principali parole chiave usate negli statement SQL, come
SELECT
,WHERE
,FROM
,UPDATE
eDELETE
. -
SQL Tutorial insegna le basi SQL che possono essere usate in tutte le principali implementazioni di database relazionali.
-
La vita di una query SQL spiega cosa succede sia concettualmente che tecnicamente all’interno di un database quando viene eseguita una query SQL. L’autore usa PostgreSQL come database di esempio e la sintassi SQL per tutto il post.
-
Una guida probabilmente incompleta ed esauriente ai molti modi diversi di unire le tabelle in SQL elabora una delle parti più complicate della scrittura di istruzioni SQL che collegano una o più tabelle: il
JOIN
. -
Scrivere meglio SQL è una breve guida allo stile del codice per rendere le vostre query più facili da leggere.
-
SQL Intermediate è un tutorial oltre le basi che usa dati aperti dell’US Consumer Financial Protection Bureau come esempi per contare, interrogare e usare viste in PostgreSQL.
Risorse generali di database
-
Come funziona un database relazionale? è un post dettagliato su ordinamento, ricerca, fusione e altre operazioni che spesso diamo per scontate quando si usa un database relazionale consolidato come PostgreSQL.
-
Databases 101 dà una grande panoramica dei principali concetti di database relazionali che è rilevante anche per i non sviluppatori come introduzione.
-
Cinque errori che i principianti fanno quando lavorano con i database spiega perché non si dovrebbero memorizzare immagini nei database e perché essere cauti nel normalizzare il proprio schema.
-
DB-Engines classifica i sistemi di gestione di database più popolari.
-
DB Weekly è una raccolta settimanale di articoli e risorse generali sui database.
-
Designing Highly Scalable Database Architecturescopre lo scaling orizzontale e verticale, la replicazione e il caching nelle architetture di database relazionali.
-
Online migrations at scale è un’ottima lettura sulla rottura della complessità di una schemamigrazione di database per un database operativo. L’approccio utilizzato dal team dell’autore era un modello di scrittura duale in 4 fasi per evolvere attentamente il modo in cui i dati per le sottoscrizioni erano memorizzati in modo da poter passare a un nuovo modello di memorizzazione più efficiente.
-
A one size fits all database doesn’t fit anyoneexplains Amazon Web Services’ specific rationale for having so many typesof relational and non-relational databases on its platform but the article is also a good overview of various database models and their use cases.
-
SQL ha 43 anni – ecco 8 ragioni per cui lo usiamo ancora oggi elenca perché SQL è comunemente usato da quasi tutti gli sviluppatori anche se il linguaggio si avvicina al suo cinquantesimo anniversario.
-
L’approfondimento sulle chiavi SQL fornisce un’ottima spiegazione di cosa sono le chiavi primarie e di come si dovrebbero usare.
-
L’esplorazione di un set di dati in SQL è un buon esempio di come SQL da solo possa essere usato per l’analisi dei dati. Questo tutorial usa i dati di Spotify per mostrare come estrarre ciò che si sta cercando di imparare da un insieme di dati.
-
Le strategie di test di integrazione dei database coprono un argomento difficile che viene fuori in ogni progetto del mondo reale.
-
GitLab ha fornito il loro postmortem di un’interruzione del database il 31 gennaio come un modo per essere trasparente ai clienti e aiutare altri team di sviluppo a imparare come hanno incasinato i loro sistemi di database e poi hanno trovato un modo per recuperare.
-
Asynchronous Python and Databasesè un articolo approfondito che copre perché molti driver di database Python non possono essere usati senza modifiche a causa delle differenze nei modelli di eventi bloccanti rispetto a quelli sincroni. Sicuramente vale la pena leggere se state usando WebSockets tramite Tornado o gevent.
-
PostgreSQL vs. MS SQL Server è una prospettiva sulle differenze tra i due server di database da un analista di dati.
Lista di controllo per imparare i database
-
Installate PostgreSQL sul vostro server. Assumendo che tu abbia scelto Ubuntu run
sudo apt-get install postgresql
. -
Assicurati che la libreria psycopg2 sia nelle dipendenze della tua applicazione.
-
Configura la tua applicazione web per connettersi all’istanza di PostgreSQL.
-
Crea modelli nel tuo ORM, sia con l’ORM integrato di Django che con SQLAlchemy con Flask.
-
Costruisci le tabelle del tuo database o sincronizza i modelli ORM con l’istanza PostgreSQL, se stai usando un ORM.
-
Inizia a creare, leggere, aggiornare e cancellare dati nel database dalla tua applicazione web.