Saviez-vous que Python a un SGBD intégré?

Si vous ĂȘtes un programmeur, alors je pense que vous connaissez probablement l'existence d'un SGBD SQLite extrĂȘmement compact et peu exigeant, ou que vous l'avez mĂȘme utilisĂ©. Ce systĂšme a presque toutes les capacitĂ©s que vous attendez d'un systĂšme de gestion de base de donnĂ©es relationnelle, mais tout est stockĂ© dans un seul fichier. Voici quelques-uns des scĂ©narios d'utilisation de SQLite mentionnĂ©s sur le site officiel de ce systĂšme:



  • Appareils embarquĂ©s et IoT.
  • L'analyse des donnĂ©es.
  • TransfĂ©rer des donnĂ©es d'un systĂšme Ă  un autre.
  • Archivage des donnĂ©es et (ou) conditionnement des donnĂ©es dans des conteneurs.
  • Stockage des donnĂ©es dans une base de donnĂ©es externe ou temporaire.
  • Un substitut Ă  une base de donnĂ©es d'entreprise utilisĂ©e Ă  des fins de dĂ©monstration ou de test.
  • Formation, maĂźtrise par des dĂ©butants des techniques pratiques de travail avec une base de donnĂ©es.
  • Prototypage et recherche d'extensions expĂ©rimentales du langage SQL.


Vous pouvez trouver d' autres raisons d' utiliser cette base de données dans la documentation SQLite . Cet article concerne l'utilisation de SQLite dans le développement Python. Par conséquent, il est particuliÚrement important pour nous que ce SGBD, représenté par le module , soit inclus dans la bibliothÚque standard du langage. Autrement dit, il s'avÚre que pour travailler avec SQLite à partir de code Python, vous n'avez pas besoin d'installer certains logiciels client-serveur, vous n'avez pas besoin de prendre en charge le fonctionnement de certains services chargés de travailler avec le SGBD. Tout ce que vous avez à faire est d'importer le module et de commencer à l'utiliser dans le programme, aprÚs avoir reçu le systÚme de gestion de base de données relationnelle à votre disposition.







sqlite3sqlite3



Importation de module



Ci-dessus, j'ai dit que SQLite est un SGBD intégré à Python. Cela signifie que pour commencer à travailler avec lui, il suffit d'importer le module correspondant sans l'installer au préalable à l'aide d'une commande comme pip install. La commande d'importation SQLite ressemble à ceci:



import sqlite3 as sl


Créer une connexion à la base de données



Pour établir une connexion à une base de données SQLite, vous n'avez pas à vous soucier de l'installation des pilotes, de la préparation des chaßnes de connexion et autres. Il est trÚs simple et rapide de créer une base de données et de mettre à votre disposition un objet de connexion à celle-ci:



con = sl.connect('my-test.db')


En exĂ©cutant cette ligne de code, nous allons crĂ©er une base de donnĂ©es et nous y connecter. Le fait ici est que la base de donnĂ©es Ă  laquelle nous nous connectons n'existe pas encore, de sorte que le systĂšme crĂ©e automatiquement une nouvelle base de donnĂ©es vide. Si la base de donnĂ©es a dĂ©jĂ  Ă©tĂ© crĂ©Ă©e (disons que cela provient my-test.dbde l'exemple prĂ©cĂ©dent), pour vous y connecter, il vous suffit d'utiliser exactement le mĂȘme code.





Fichier de base de données nouvellement créé



Créer une table



Créons maintenant une table dans notre nouvelle base de données:



with con:
    con.execute("""
        CREATE TABLE USER (
            id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
            name TEXT,
            age INTEGER
        );
    """)


Ceci décrit comment ajouter une table USERavec trois colonnes à la base de données . Comme vous pouvez le voir, SQLite est en effet un systÚme de gestion de base de données trÚs simple, mais il possÚde toutes les capacités de base que vous attendez d'un systÚme de gestion de base de données relationnelle classique. Nous parlons de la prise en charge des types de données, y compris les types qui autorisent une valeur null, la prise en charge de la clé primaire et l'auto-incrémentation.



Si ce code fonctionne comme prĂ©vu (la commande ci-dessus, cependant, ne renvoie rien), nous aurons une table Ă  notre disposition, prĂȘte Ă  travailler avec elle.



Insertion d'enregistrements dans une table



Insérons quelques enregistrements dans la table que USERnous venons de créer. Ceci, entre autres, nous donnera la preuve que la table a bien été créée par la commande ci-dessus.



Imaginons que nous devions ajouter plusieurs enregistrements Ă  la table avec une seule commande. C'est trĂšs simple de faire cela dans SQLite:



sql = 'INSERT INTO USER (id, name, age) values(?, ?, ?)'
data = [
    (1, 'Alice', 21),
    (2, 'Bob', 22),
    (3, 'Chris', 23)
]


Ici, nous devons dĂ©finir une expression SQL avec des points d'interrogation ( ?) comme espaces rĂ©servĂ©s. Étant donnĂ© que nous avons un objet de connexion Ă  la base de donnĂ©es Ă  notre disposition, nous, aprĂšs avoir prĂ©parĂ© l'expression et les donnĂ©es, pouvons insĂ©rer des enregistrements dans la table:



with con:
    con.executemany(sql, data)


AprÚs l'exécution de ce code, aucun message d'erreur n'est reçu, ce qui signifie que les données ont été ajoutées avec succÚs à la table.



ExĂ©cution de requĂȘtes de base de donnĂ©es



Il est maintenant temps de savoir si les commandes que nous venons d'exĂ©cuter ont fonctionnĂ© correctement. ExĂ©cutons une requĂȘte dans la base de donnĂ©es et essayons d'obtenir USERdes donnĂ©es de la table . Par exemple - nous obtenons des enregistrements relatifs aux utilisateurs dont l'Ăąge ne dĂ©passe pas 22 ans:



with con:
    data = con.execute("SELECT * FROM USER WHERE age <= 22")
    for row in data:
        print(row)




Le rĂ©sultat de l'exĂ©cution d'une requĂȘte de base de donnĂ©es



Comme vous pouvez le voir, nous avons réussi à obtenir ce dont nous avions besoin. Et c'était trÚs facile de le faire.



De plus, mĂȘme si SQLite est un simple SGBD, il dispose d'un support extrĂȘmement large. Par consĂ©quent, vous pouvez l'utiliser en utilisant la plupart des clients SQL.



J'utilise DBeaver. Jetons un coup d'Ɠil à quoi cela ressemble.



Connexion à la base de données SQLite à partir du client SQL (DBeaver)



J'utilise le service cloud de Google Colab et je souhaite télécharger un fichier my-test.dbsur mon ordinateur. Si vous expérimentez SQLite sur un ordinateur, cela signifie que vous pouvez vous y connecter à l'aide du client SQL sans avoir à télécharger le fichier de base de données depuis quelque part.



Dans le cas de DBeaver, pour vous connecter à la base de données SQLite, vous devez créer une nouvelle connexion et sélectionner SQLite comme type de base de données.





Préparation de la connexion dans DBeaver



Ensuite, vous devez trouver le fichier de base de données.





Connexion du fichier de base de données



AprĂšs cela, vous pouvez exĂ©cuter des requĂȘtes SQL sur la base de donnĂ©es. Il n'y a rien de spĂ©cial ici qui diffĂšre du travail avec des bases de donnĂ©es relationnelles rĂ©guliĂšres.





ExĂ©cution de requĂȘtes de base de donnĂ©es



Intégration avec les pandas



Pensez-vous que c'est lĂ  que nous terminons notre conversation sur la prise en charge de SQLite en Python? Non, nous avons encore beaucoup Ă  dire. À savoir, puisque SQLite est un module Python standard, il s'intĂšgre facilement aux cadres de donnĂ©es pandas.



DĂ©clarons le dataframe:



df_skill = pd.DataFrame({
    'user_id': [1,1,2,2,3,3,3],
    'skill': ['Network Security', 'Algorithm Development', 'Network Security', 'Java', 'Python', 'Data Science', 'Machine Learning']
})




Dataframe Pandas



Pour enregistrer une dataframe dans la base de données, vous pouvez simplement utiliser sa méthodeto_sql():



df_skill.to_sql('SKILL', con)


C'est tout! Nous n'avons mĂȘme pas besoin de crĂ©er une table au prĂ©alable. Les types de donnĂ©es et les caractĂ©ristiques des champs seront configurĂ©s automatiquement en fonction des caractĂ©ristiques de la trame de donnĂ©es. Bien sĂ»r, vous pouvez tout personnaliser vous-mĂȘme si nĂ©cessaire.



Supposons maintenant que nous devions obtenir l'union des tables USERet SKILL, et écrire les données dans datafreym pandas. C'est trÚs simple aussi:



df = pd.read_sql('''
    SELECT s.user_id, u.name, u.age, s.skill 
    FROM USER u LEFT JOIN SKILL s ON u.id = s.user_id
''', con)




Lire les données d'une base de données dans un dataframe pandas Génial



! Maintenant, écrivons ce que nous avons obtenu dans une nouvelle table appeléeUSER_SKILL:



df.to_sql('USER_SKILL', con)


Bien entendu, vous pouvez travailler avec cette table Ă  l'aide du client SQL.





Utilisation d'un client SQL pour travailler avec une base de données



RĂ©sultat



Il y a certainement de nombreuses surprises agrĂ©ables en Python que, Ă  moins que vous ne les recherchiez spĂ©cifiquement, vous ne remarquerez peut-ĂȘtre pas. Personne n'a cachĂ© ces fonctionnalitĂ©s spĂ©cialement, mais en raison du fait que beaucoup de choses sont intĂ©grĂ©es Ă  Python, vous ne pouvez tout simplement pas faire attention Ă  certaines de ces fonctionnalitĂ©s, ou, aprĂšs les avoir appris quelque part, oubliez-les.



Ici, j'ai expliquĂ© comment utiliser la bibliothĂšque intĂ©grĂ©e de Python sqlite3pour crĂ©er et travailler avec des bases de donnĂ©es. Bien entendu, ces bases de donnĂ©es prennent en charge non seulement l'opĂ©ration d'ajout de donnĂ©es, mais Ă©galement les opĂ©rations de modification et de suppression d'informations. Je crois que vous, aprĂšs avoir appris sqlite3, vous en ferez l'expĂ©rience vous-mĂȘme.



La chose trÚs importante est que SQLite fait un excellent travail avec les pandas. Il est trÚs facile de lire les données de la base de données en les plaçant dans des dataframes. L'opération de sauvegarde du contenu des dataframes dans une base de données n'est pas moins simple. Cela rend SQLite encore plus facile à utiliser.



J'invite tous ceux qui ont lu jusqu'ici à faire leurs propres recherches à la recherche de fonctionnalités Python intéressantes!



Le code que j'ai dĂ©montrĂ© dans cet article peut ĂȘtre trouvĂ© ici .



Utilisez-vous SQLite dans vos projets Python?






All Articles