Python - Bases de données relationnelles

Nous pouvons nous connecter à des bases de données relationnelles pour analyser les données en utilisant le pandasbibliothèque ainsi qu'une autre bibliothèque supplémentaire pour la mise en œuvre de la connectivité de base de données. Ce package est nommésqlalchemy qui fournit des fonctionnalités de langage SQL complètes à utiliser en python.

Installation de SQLAlchemy

L'installation est très simple en utilisant Anaconda dont nous avons discuté dans le chapitre . En supposant que vous avez installé Anaconda comme décrit dans ce chapitre, exécutez la commande suivante dans la fenêtre d'invite Anaconda pour installer le package SQLAlchemy.

conda install sqlalchemy

Lecture de tableaux relationnels

Nous utiliserons Sqlite3 comme base de données relationnelle car elle est très légère et facile à utiliser. Bien que la bibliothèque SQLAlchemy puisse se connecter à diverses sources relationnelles, notamment MySql, Oracle et Postgresql et Mssql. Nous créons d'abord un moteur de base de données, puis nous nous connectons au moteur de base de données à l'aide duto_sql fonction de la bibliothèque SQLAlchemy.

Dans l'exemple ci-dessous, nous créons la table relationnelle en utilisant le to_sqlfonction d'un dataframe déjà créé en lisant un fichier csv. Ensuite, nous utilisons leread_sql_query fonction de pandas pour exécuter et capturer les résultats de diverses requêtes SQL.

from sqlalchemy import create_engine
import pandas as pd

data = pd.read_csv('/path/input.csv')

# Create the db engine
engine = create_engine('sqlite:///:memory:')

# Store the dataframe as a table
data.to_sql('data_table', engine)

# Query 1 on the relational table
res1 = pd.read_sql_query('SELECT * FROM data_table', engine)
print('Result 1')
print(res1)
print('')

# Query 2 on the relational table
res2 = pd.read_sql_query('SELECT dept,sum(salary) FROM data_table group by dept', engine)
print('Result 2')
print(res2)

Lorsque nous exécutons le code ci-dessus, cela produit le résultat suivant.

Result 1
   index  id    name  salary  start_date        dept
0      0   1    Rick  623.30  2012-01-01          IT
1      1   2     Dan  515.20  2013-09-23  Operations
2      2   3   Tusar  611.00  2014-11-15          IT
3      3   4    Ryan  729.00  2014-05-11          HR
4      4   5    Gary  843.25  2015-03-27     Finance
5      5   6   Rasmi  578.00  2013-05-21          IT
6      6   7  Pranab  632.80  2013-07-30  Operations
7      7   8    Guru  722.50  2014-06-17     Finance

Result 2
         dept  sum(salary)
0     Finance      1565.75
1          HR       729.00
2          IT      1812.30
3  Operations      1148.00

Insertion de données dans des tables relationnelles

Nous pouvons également insérer des données dans des tables relationnelles à l'aide de la fonction sql.execute disponible dans les pandas. Dans le code ci-dessous, nous avons précédé le fichier csv en tant qu'ensemble de données d'entrée, le stockons dans une table relationnelle, puis insérons un autre enregistrement à l'aide de sql.execute.

from sqlalchemy import create_engine
from pandas.io import sql

import pandas as pd

data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')

# Store the Data in a relational table
data.to_sql('data_table', engine)

# Insert another row
sql.execute('INSERT INTO data_table VALUES(?,?,?,?,?,?)', engine, params=[('id',9,'Ruby',711.20,'2015-03-27','IT')])

# Read from the relational table
res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)

Lorsque nous exécutons le code ci-dessus, cela produit le résultat suivant.

id        dept    name  salary  start_date
0   1          IT    Rick  623.30  2012-01-01
1   2  Operations     Dan  515.20  2013-09-23
2   3          IT   Tusar  611.00  2014-11-15
3   4          HR    Ryan  729.00  2014-05-11
4   5     Finance    Gary  843.25  2015-03-27
5   6          IT   Rasmi  578.00  2013-05-21
6   7  Operations  Pranab  632.80  2013-07-30
7   8     Finance    Guru  722.50  2014-06-17
8   9          IT    Ruby  711.20  2015-03-27

Suppression de données des tables relationnelles

Nous pouvons également supprimer des données dans des tables relationnelles à l'aide de la fonction sql.execute disponible dans les pandas. Le code ci-dessous supprime une ligne en fonction de la condition d'entrée donnée.

from sqlalchemy import create_engine
from pandas.io import sql

import pandas as pd

data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')
data.to_sql('data_table', engine)

sql.execute('Delete from data_table where name = (?) ', engine,  params=[('Gary')])

res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)

Lorsque nous exécutons le code ci-dessus, cela produit le résultat suivant.

id        dept    name  salary  start_date
0   1          IT    Rick   623.3  2012-01-01
1   2  Operations     Dan   515.2  2013-09-23
2   3          IT   Tusar   611.0  2014-11-15
3   4          HR    Ryan   729.0  2014-05-11
4   6          IT   Rasmi   578.0  2013-05-21
5   7  Operations  Pranab   632.8  2013-07-30
6   8     Finance    Guru   722.5  2014-06-17