Effettuare richieste al database è una tipica attività legata all'IO poiché trascorre la maggior parte del tempo in attesa della risposta da un server di database. Pertanto, se la tua applicazione effettua molte richieste al database, le prestazioni possono essere migliorate notevolmente eseguendole contemporaneamente, il che è supportato da SQLAchemy, un versatile toolkit SQL Python e Object Relational Mapper.
Inoltre, la programmazione asincrona sta diventando sempre più popolare in Python, soprattutto con FastAPI per lo sviluppo web, spesso abbiamo bisogno di fare richieste al database in coroutine, cioè in funzioni definite con il metodo async def
dichiarazione. Sfortunatamente, non possiamo utilizzare la classica versione sincrona di SQLAlchemy ma dobbiamo creare versioni asincrone di motori, connessioni e sessioni.
In questo post, introdurremo come utilizzare SQLAlchemy in modo asincrono in diversi scenari, ovvero con semplici query SQL, Core e ORM. È importante sottolineare che introdurremo come utilizzarlo in più attività asincrone contemporaneamente, il che può migliorare notevolmente l'efficienza delle applicazioni legate a IO se utilizzate correttamente.
Inizieremo un server MySQL localmente con Docker in cui creeremo il database e la tabella per la dimostrazione:
# Create a volume to persist the data.
$ docker volume create mysql8-data# Create the container for MySQL.
$ docker run --name mysql8 -d -e MYSQL_ROOT_PASSWORD=root -p 13306:3306 -v mysql8-data:/var/lib/mysql mysql:8
# Connect to the local MySQL server in Docker.
$ docker exec -it mysql8 mysql -u root -proot
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.3.0 |
+-----------+
1 row in set (0.00 sec)
CREATE DATABASE sales;CREATE TABLE `sales`.`customers` (
`id` SMALLINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`job` VARCHAR(50) DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE `UQ_name` (`name`)
);
INSERT INTO sales.customers
(name, job)
VALUES
('Lynn', 'Backend Developer')
;
Quindi creiamo un ambiente virtuale così possiamo provare le ultime versioni di Python e le librerie:
Fonte: towardsdatascience.com