Come utilizzare SQLAlchemy per effettuare richieste al database in modo asincrono |  di Lynn G. Kwong |  Marzo 2024

 | Intelligenza-Artificiale

Impara a utilizzare SQLAlchemy in modo asincrono in diversi scenari

Immagine di WilliamsCreativity (dati del server) da Pixabay

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *