Guest User

Untitled

a guest
Sep 17th, 2018
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.37 KB | None | 0 0
  1. # Utiliser une base de données SQL avec Python sqlite 3.
  2.  
  3. Une base de données ou database est un outil qui permet de stocker des données numériques telles que les informations et mots de passes des utilisateurs d'un site, les messages et posts d'un forum ou d'un blog...
  4.  
  5. Les bases de données SQL sont stockées dans des fichiers text (.txt) que l'on ne modifie pas directement mais par l'intermédiaire d'un logiciel de gestion de bases de données. Le module sqlite 3 de Python permet de gérer des bases de données SQL: il est ainsi possible de créer des bases de données, de stocker des informations dans des tables, modifier, supprimer, ou extraire ces informations...
  6.  
  7. L'utilisation des bases de données SQL nécessite d'employer un langage particulier: le langage SQL.
  8.  
  9. ### Créer une base de données.
  10.  
  11. On utilise pour cela la fonction connect(). Notre base de données s'appèlera *data*.
  12.  
  13. from sqlite3 import *
  14.  
  15. conn = connect("data.txt")
  16.  
  17. Un fichier data.txt se crée alors automatiquement.
  18. Il est désormais possible de se connecter à cette base de données en utilisant la même ligne de code.
  19.  
  20. Avant de réaliser toutes actions sur cette base de données il sera nécessaire de créer un "curseur" grâce à la fonction cursor().
  21.  
  22. cur = conn.cursor()
  23.  
  24. ### Fermer une base de données.
  25.  
  26. cur.close()
  27. conn.close()
  28.  
  29. ### Créer une table.
  30.  
  31. Une table est un moyen de ranger les informations dans votre base. La meilleure représentation que l'on puisse s'en faire est un tableau. Cependant si vous ouvrez directement votre fichier data.txt (à éviter et à ne surtout pas modifier directement) vous verrez que les informations sont rangées très différemment.
  32.  
  33. Notre table s'appellera "membres", elle contiendra trois colonnes: une colonne pour l’id qui acceptera des données de type integer , une colonne pour le pseudo qui acceptera des données de type text, et une colonne pour le mail qui acceptera aussi des donnees de type text
  34.  
  35. cur.execute("CREATE TABLE membres (id INTEGER pseudo TEXT, mail TEXT)")
  36.  
  37. Si la table existe déjà ca bug, pour éviter cela, on peut utiliser la requête "if not exists"
  38.  
  39. cur.execute("CREATE TABLE IF NOT EXISTS membres (id INTEGER pseudo TEXT, mail TEXT)")
  40.  
  41. ### Supprimer une table.
  42.  
  43. cur.execute("DROP TABLE membres")
  44.  
  45. ### Entrer des données dans une table.
  46.  
  47. cur.execute("INSERT INTO membres(id, pseudo, mail) VALUES(243, 'Robert ','robert@hotmail.fr')")
  48.  
  49. Il faut ensuite toujours penser à enregistrer les modifications de la table grâce à la commande suivante:
  50.  
  51. conn.commit()
  52.  
  53.  
  54. Une autre méthode consiste à rentrer au préalable les valeurs dans une tuple; cela permet de compléter en même temps plusieurs lignes de la table:
  55.  
  56. d =[(32, "Simon","simon@hotmail.fr"),(33, "Patrick","patrick@yahoo.com")]
  57.  
  58. for i in d:
  59. cur.execute("INSERT INTO membres(id, pseudo,mail) VALUES(?,?,?)", i)
  60. conn.commit()
  61.  
  62. Cela permet aussi d'automatiser les entrées dans la table:
  63.  
  64. ID = 67
  65. Pseudonyme = "Sylvain"
  66. Email = "syl@gmail.com"
  67.  
  68. d =[(ID, Pseudonyme, Email)]
  69.  
  70. for i in d:
  71. cur.execute("INSERT INTO membres(id, pseudo,mail) VALUES(?,?,?)", i)
  72. conn.commit()
  73.  
  74. ### Extraire des données.
  75.  
  76. `cur.fetchall()` renvoie une liste de tuple contenant l’intégralité de ce que la requête a retourné.
  77.  
  78. >>> cur.execute("SELECT * FROM membres")
  79. <sqlite3.Cursor object at 0x10acc36c0>
  80. >>> r = cur.fetchall()
  81. >>> r
  82. [(32, 'Simon', 'simon@hotmail.fr'), (33, 'Patrick', 'patrick@yahoo.com')]
  83.  
  84.  
  85. `cur.fetchone()` renvoie seulement la première tuple. Utilisez le si vous ne voulez que la première tuple, ou plus généralement si vous vous attendez à ce que votre requête ne retourne qu’une seule tuple.
  86.  
  87. >>> cur.execute("SELECT * FROM membres")
  88. <sqlite3.Cursor object at 0x10acc36c0>
  89. >>> r = cur.fetchone()
  90. >>> r
  91. (32, 'Simon', 'simon@hotmail.fr')
  92.  
  93.  
  94. Extraire seulement les données de la colonne pseudo:
  95.  
  96. >>> cur.execute("SELECT pseudo FROM membres")
  97. <sqlite3.Cursor object at 0x10acc36c0>
  98. >>> r = cur.fetchall()
  99. >>> r
  100. [('Simon',), ('Patrick',)]
  101.  
  102. Extraire seulement les données des colonnes pseudo et mail :
  103.  
  104. >>> cur.execute("SELECT pseudo,mail FROM membres")
  105. <sqlite3.Cursor object at 0x10964d810>
  106. >>> r = cur.fetchall()
  107. >>> r
  108. [('Simon', 'simon@hotmail.fr'), ('Patrick', 'patrick@yahoo.com')]
  109.  
  110. Extraire le mail du membre ayant exactement le pseudo "Patrick":
  111.  
  112. >>> x = 'Patrick'
  113. >>> cur.execute("SELECT mail FROM membres WHERE pseudo = ?",(x,))
  114. <sqlite3.Cursor object at 0x10964d810>
  115. >>> r = cur.fetchone()
  116. >>> r
  117. ('patrick@yahoo.com',)
  118.  
  119. Extraire tous les pseudo dont l'adresse mail contient le mot "yahoo" :
  120.  
  121. >>> x = '%yahoo%'
  122. >>> cur.execute("SELECT pseudo FROM membres WHERE mail LIKE ?",(x,))
  123. <sqlite3.Cursor object at 0x1097a5810>
  124. >>> r = cur.fetchall()
  125. >>> r
  126. [('Patrick',)]
  127.  
  128. Les requêtes SELECT suivantes vous donneront un petit aperçu de ce qu'il est possible de faire. (Elles font reference à une table ayant pour nom: "table" et pour colonnes: "colA" , "colB" , "colC", "colD", colC et colD étant de type INTEGER)
  129.  
  130. select * from table
  131. select * from table where colA = 'Robert'
  132. select * from table where colA = 'Robert' and colB = ‘Diatta’
  133. select colA, colB from table order by colB
  134. select colA, colB from table where colA='Darwin' or colA='Mendel' order by colB
  135. select sum(colC) from table
  136. select sum(colC) from oeuvres where colA='Robert'
  137. select * from table where colC >35 order by colD desc
  138. select * from table where colD <1800
  139. select * from table where colD <1800 limit 3
  140.  
  141.  
  142. ### Modifier des données.
  143.  
  144. Pour remplacer des données:
  145.  
  146. cur.execute("UPDATE membres SET pseudo ='Patrick' WHERE pseudo ='Robert'")
  147.  
  148. Pour supprimer des données:
  149.  
  150. cur.execute("DELETE FROM membres WHERE pseudo ='Robert'")
  151.  
  152. N'oubliez pas d'enregistrer vos modifications:
  153.  
  154. conn.commit()
  155.  
  156.  
  157. ### Faire une jointure entre 2 tables.
  158.  
  159. SELECT * FROM table1, table2 WHERE table1.cola = table2.colb
  160.  
  161.  
  162. ### Ajouter une colonne à une table
  163.  
  164. ALTER TABLE NomTable ADD COLUMN NomNouvelleColonne ColonneType
  165.  
  166.  
  167. ### Obtenir des informations sur une table ou une base
  168.  
  169. #### Obtenir une liste des colonnes d'une table
  170.  
  171. cur.execute("SELECT * FROM table)
  172. r = list(cur.description)
  173. col = [i[0] for i in r]
  174.  
  175. #### Obtenir une liste des tables d'une base
  176.  
  177. cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
  178. cel = list(cur)
Add Comment
Please, Sign In to add comment