Voir l'article précédent pour plus de détails.
"À propos du SGBDR et de SQL" https://qiita.com/Taka20200105/items/c58ac4e610954c6d263b
8.3.1 SQL
--SQL se divise en deux catégories. --DDL (Data Definition Language): créer, supprimer, contraindre et autoriser des bases de données de table. --DML (Data Manipulation Language): traitement tel que l'insertion, la sélection, la mise à jour et la suppression de données
8.3.2 DB-API
--API est un ensemble de fonctions à appeler pour accéder au service. Comprendre qu'ouvrir une API signifie créer une fenêtre unique et la relier à un logiciel externe. C'est comme Dejima dans un pays isolé. --DB-API est l'API standard de Python pour accéder au SGBDR.
une fonction | sens |
---|---|
connect() | Ouvrez une connexion à la base de données. Des arguments peuvent être spécifiés. |
cursor() | Créer un objet curseur pour gérer la requête |
execute()Et exécutez beaucoup() | Envoyez une ou plusieurs commandes SQL à la base de données. |
fechone()、fetchmany()、fetch all() | Envoyez une ou plusieurs commandes SQL à la base de données. |
8.3.3 SQLite
--SQLite stocke la base de données dans un fichier normal.
>>> import sqlite3
#enterprise.Créez une base de données nommée db.
>>> conn=sqlite3.connect("enterprise.db")
>>> curs=conn.cursor()
#Création d'une table appelée zoo.
#Chaîne de clé primaire de chaîne de longueur variable appelée critter
#Une chaîne de nombres appelée count
#Colonne à virgule flottante appelée dommages
>>> curs.execute("""CREATE TABLE zoo (critter VARCHAR(20)PRIMARY KEY,count INT,damages FLOAT)""")
<sqlite3.Cursor object at 0x10b215f80>
#La chaîne de caractères ci-dessous exécuter est la commande DML
#INSERT INTO zoo VALUES(〜)Ajoutez une ligne avec.
>>> curs.execute("""INSERT INTO zoo VALUES("duck",5,0.0)""")
<sqlite3.Cursor object at 0x10b23d030>
>>> curs.execute("""INSERT INTO zoo VALUES("bear",2,1000.0)""")
<sqlite3.Cursor object at 0x10b23d030>
#Il peut également être ajouté par les méthodes d'addition suivantes.
#Trois points d'interrogation indiquent l'insertion prévue.
>>> ins="""INSERT INTO zoo (critter,count,damages) VALUES(?,?,?)"""
>>> curs.execute(ins, ("weasel",1,2000.0))
<sqlite3.Cursor object at 0x10b23d030>
#"SELECT *FROM nom de la table"Sélectionnez toutes les lignes et colonnes avec
>>> curs.execute("SELECT * FROM zoo")
<sqlite3.Cursor object at 0x10b23d030>
#Obtenir des résultats
>>> rows=curs.fetchall()
>>> print(rows)
[('duck', 5, 0.0), ('bear', 2, 1000.0), ('weasel', 1, 2000.0)]
#Trier par ordre de décompte.
>>> curs.execute("SELECT * FROM zoo ORDER BY count")
<sqlite3.Cursor object at 0x10b23d030>
>>> curs.fetchall()
[('weasel', 1, 2000.0), ('bear', 2, 1000.0), ('duck', 5, 0.0)]
#Dans l'ordre de décompte et dans l'ordre décroissant.
>>> curs.execute("SELECT * FROM zoo ORDER BY count DESC")
<sqlite3.Cursor object at 0x10b23d030>
>>> curs.fetchall()
[('duck', 5, 0.0), ('bear', 2, 1000.0), ('weasel', 1, 2000.0)]
#Sélection de celui avec les plus gros dégâts.
>>> curs.execute("""SELECT * FROM zoo WHERE damages=(SELECT MAX(damages) FROM zoo)""")<sqlite3.Cursor object at 0x10b23d030>
>>> curs.fetchall()
[('weasel', 1, 2000.0)]
#Une fois que vous avez ouvert la connexion et le curseur, vous devez le fermer lorsque vous avez fini de l'utiliser.
>>> curs.close
<built-in method close of sqlite3.Cursor object at 0x10b23d030>
>>> conn.close
<built-in method close of sqlite3.Connection object at 0x10b1d4ab0>
8.3.4 MySQL
―― Contrairement à SQLite, MySQL est un vrai serveur.
8.3.5 PostgreSQL
--PostgreSQL est un SGBDR open source à part entière qui est plus avancé que MySQL.
--SQL n'est pas le même pour tous les SGBDR. --DB-API ne peut prendre en charge que jusqu'au niveau API commun. → Parmi les bibliothèques qui tentent de combler les différences entre les bases de données individuelles, la bibliothèque Python inter-bases de données SQLAIchemy a beaucoup de support.
--dialect + driver: // user: password @ host: port / dbname est le format de la chaîne de connexion. --dialect: type de base de données --driver: le pilote que vous souhaitez utiliser pour cette base de données. --user et mot de passe: chaîne d'authentification DB --host et port: emplacement du serveur de base de données --dbname: DB sur le serveur auquel se connecter en premier.
--SQLAIchemy déterminera le pilote requis à partir de la chaîne de connexion. --Portable vers d'autres types de DB simplement en modifiant la chaîne de connexion.
>>> import sqlalchemy as sa
#Ouvrez une base de données et créez une zone de stockage.
#Un objet appelé ResultProxy est renvoyé.
#Si dbname est omis, le fichier DB est stocké dans la mémoire.
#Hôte dans la chaîne SQlite, port,user,Aucun mot de passe requis.
>>> conn=sa.create_engine("sqlite://")
#Créez une table de zoo avec 3 colonnes.
>>> conn.execute("""CREATE TABLE zoo (critter VARCHAR(20) PRIMARY KEY,count INT,damages FLOAT)""")
<sqlalchemy.engine.result.ResultProxy object at 0x108ee3210>
#Insérez les données f3.
>>> ins="""INSERT INTO zoo (critter,count,damages) VALUES(?,?,?)"""
>>> conn.execute(ins,"duck",10,0.0)
<sqlalchemy.engine.result.ResultProxy object at 0x108ee3290>
>>> conn.execute(ins,"bear",2,1000.0)
<sqlalchemy.engine.result.ResultProxy object at 0x108ee3350>
>>> conn.execute(ins,"weasel",1,2000.0)
<sqlalchemy.engine.result.ResultProxy object at 0x108ee32d0>
#Demandez toutes les informations du zoo à DB.
>>> rows=conn.execute("SELECT*FROM zoo")
>>> print(rows)
<sqlalchemy.engine.result.ResultProxy object at 0x108ee3110>
>>> for row in rows:
... print(row)
...
('duck', 10, 0.0)
('bear', 2, 1000.0)
('weasel', 1, 2000.0)
Quand j'ai étudié pour la première fois, je pensais que MySQL et PostgteSQL étaient des types SQL, mais dans cette revue, j'ai remarqué qu'ils étaient différents.
Ce qui précède est un SGBDR, pas un langage. Et de nombreuses bases de données ont leurs propres dialectes implémentés, et la bibliothèque SQL AIchemy est sortie pour combler les différences entre ces dialectes. Il est sage de juger par la chaîne de caractères de connexion sans installer le pilote pour chaque DB.
"Introduction à Python3 par Bill Lubanovic (publié par O'Reilly Japon)"
Recommended Posts