Dernière fois a étudié les bases de DB et RDB.
Cette fois, utilisons enfin DB de Python.
Installez sqlalchemy
$ pip install sqlalchemy
Créez db.py
et écrivez le contenu suivant.
db.py
from sqlalchemy import create_engine, MetaData
engine = create_engine('sqlite:///db.sqlite3', echo=True)
metadata = MetaData()
metadata.bind = engine
Je vais l'expliquer ligne par ligne.
engine = create_engine('sqlite:///db.sqlite3', echo=True)
Créez un objet pour vous connecter à la base de données.
Dans le premier argument de create_engine
, spécifiez l'URL de la base de données de destination de la connexion. Je n'expliquerai pas en détail ce qu'est l'URL de la base de données, mais dans le cas de sqlite, vous pouvez spécifier sqlite: /// file name
.
De plus, en spécifiant ʻecho = True pour
create_engine`, le journal sera affiché. Il est utile pour le débogage, il est donc recommandé de le spécifier.
En règle générale, il est nécessaire de créer le DB de destination de connexion à l'avance, mais dans sqlite, si le DB de destination de connexion n'existe pas, il sera créé automatiquement.
matadata = MetaData()
Créez les métadonnées.
Le schéma de la table est stocké dans les métadonnées, mais si vous ne le comprenez pas, vous pouvez reconnaître que «je ne sais pas, mais les données de la base de données sont incluses».
metadata.bind = engine
Connectez les métadonnées à la base de données.
Ici, nous créons une table menus
avec une colonne name
et une colonne kcal
.
Modifiez db.py comme suit.
db.py
#Importer des classes supplémentaires pour la définition de table
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///db.sqlite3', echo=True)
metadata = MetaData()
metadata.bind = engine
#définition de table de menu
menus = Table(
'menus', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('kcal', Integer)
)
Spécifiez le nom de la table dans le premier argument de Table
et les métadonnées dans le deuxième argument. Après cela, vous pouvez spécifier librement la colonne.
Définissez également le nom de la colonne dans le premier argument de Column
et le type de colonne dans le deuxième argument. De plus, la colonne «id» est définie comme clé primaire.
À ce stade, la définition de la table est terminée, mais la table n'a pas encore été créée.
Démarrez le shell interactif et créez un tableau comme indiqué ci-dessous.
>>> import db
>>> db.metadata.create_all()
À ce stade, la signification des métadonnées qui ne pouvaient pas être expliquées autant peut enfin être vue. Puisque les métadonnées ont à la fois la structure de la table et du «moteur», il est possible de créer une table.
Si metadata
et ʻengine` ne sont pas liés à ce stade, vous devez spécifier explicitement ce qui suit.
>>> import db
>>> db.metadata.create_all(engine)
De plus, il est recommandé de connecter les métadonnées et le moteur à l'avance car ce sera un peu gênant non seulement pour créer la table mais aussi pour faire fonctionner la base de données à l'avenir.
--Pour utiliser DB, il est nécessaire de se connecter à DB, de définir une table et de créer une table. --Metadata conserve les informations de la table.
Cela a peut-être été un peu difficile, mais vous êtes maintenant prêt à utiliser la base de données. Même si vous ne comprenez pas le contenu jusqu'à présent, il n'y a pas de problème immédiat avec le contenu suivant. Cependant, c'est quelque chose que vous devez comprendre, alors veuillez le relire après un certain temps.
L'opération de création de données est appelée ** insérer ** dans le SGBDR. Notez qu'il s'agit d'un insert, pas d'une création. Cela peut être plus facile à retenir si vous pensez à créer de nouvelles données comme à insérer une nouvelle ligne dans le tableau.
Dans sqlalchemy, ʻinsert` exécute:
>>> import db
>>> db.menus.insert().execute(name='Curry meshi', kcal=500)
Notez qu'après avoir appelé ʻinsert, nous appelons également ʻexecute
. Aucune opération n'est effectuée tant que vous n'appelez pas ʻexecute`.
Ceci s'applique également à d'autres opérations. En règle générale, les opérations sur la base de données ne sont exécutées que lorsque ʻexecute` est appelé.
Utilisez select
pour obtenir les données.
Tout d'abord, essayez d'exécuter le code ci-dessous.
>>> import db
>>> db.menus.select().execute().fetchall()
[(1, 'Curry meshi', 500)]
Comme avec ʻinsert, aucune donnée n'est récupérée jusqu'à ce que vous appeliez ʻexecute
. Notez également que nous appelons plus loin fetchall
pour le résultat de ʻexecute`.
Notez que la valeur de retour ressemble à une liste de taples, mais ce n'est pas le cas. Vous pouvez le traiter comme un taple comme res [0] [0]
, mais vous pouvez aussi l'obtenir par nom de colonne pour res [0] ['id']
.
Aussi, non seulement obtenir toutes les données, mais aussi utiliser where
pour affiner les données à obtenir, utiliser ʻorder_by pour trier et utiliser
limit` pour limiter le nombre de données à obtenir. Vous pouvez également.
Par exemple, avec le code ci-dessous, vous pouvez "obtenir jusqu'à 5 menus avec moins de 100 kcal et les trier par calorie".
>>> import db
>>> db.menus.select().where(db.menus.c.kcal < 100).order_by('kcal').limit(5).execute().fetchall()
Ce type de raffinement est le même pour la mise à jour et la suppression de données.
Utilisez ʻupdate. Les bases sont les mêmes que ʻinsert
, mais veuillez noter que toutes les données seront ciblées si vous ne les restreignez pas.
Le code suivant met à jour «kcal» à 1000 pour les données avec «id» de 1.
>>> import db
>>> db.menus.update().where(db.menus.c.id == 1).execute(kcal=1000)
Utilisez delete
. Les bases sont les mêmes que ʻinsert et ʻupdate
.
Le code ci-dessous supprime toutes les données avec «kcal» supérieur à 1000.
>>> import db
>>> db.menus.delete().where(db.menus.c.kcal > 1000).execute()
Dans la continuité de la première mi-temps, le contenu était un peu difficile. Peu importe si vous ne comprenez pas tout. Il peut également être utilisé comme une simple référence, donc si vous vous perdez, vérifiez-le à nouveau.
Cette fois, c'était plus difficile que la dernière fois. Ce n'est pas grave si vous ne comprenez pas tout à la fois. De plus, même si vous pensez le comprendre, vous ne savez peut-être pas comment l'écrire lorsque vous écrivez réellement le code, alors dans un tel cas, relisez-le.
Recommended Posts