[PYTHON] Comment supprimer avec SQLAlchemy?

Cette fois, j'écrirai la méthode de ** Delete ** avec ** SQLAlchemy **.

Environnement d'exploitation

Exemple de code

Tout d'abord, recherchez simplement dans la table les données dont la colonne «nom» est «Yuko Kuwata» et supprimez-la.

sqlalchemy_delete.py


# -*- coding:utf-8 -*-
import sqlalchemy
import sqlalchemy.orm
import sqlalchemy.ext.declarative

Base = sqlalchemy.ext.declarative.declarative_base()

class Student(Base):
    __tablename__ = 'students'
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    name = sqlalchemy.Column(sqlalchemy.String(20))
    kana = sqlalchemy.Column(sqlalchemy.String(40))

def main():
    url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'

    engine = sqlalchemy.create_engine(url, echo=False)

    #Créer une table
    Base.metadata.create_all(engine)

    #Créer une session
    Session = sqlalchemy.orm.sessionmaker(bind=engine)
    session = Session()

    #Supprimer toutes les données
    session.query(Student).delete()

    #Liste des données à ajouter à la base de données
    student_list = [
        Student(id=1, name='Yu Ishizaka', kana='Yu Ishizaka'),
        Student(id=2, name='Seiichi Sugino', kana='Sugi no Seiichi'),
        Student(id=3, name='Yuko Kuwata', kana='Yuko Kuwata'),
        Student(id=4, name='Ai Kurihara', kana='Kurihara Ai'),
        Student(id=5, name='Hitoshi Sakuma', kana='Sakuma Jin'),
    ]

    #Ajouter une liste de données à la fois
    session.add_all(student_list)

    #Rechercher les données à supprimer
    found_student = session.query(Student).filter_by(name='Yuko Kuwata').first()

    #Supprimer les données spécifiées
    session.delete(found_student)

    #Sortez toutes les données du tableau
    print_all_students(session)

    #Reflété dans la base de données
    session.commit()

#Une fonction qui sort toutes les données du tableau
def print_all_students(session):
    students = session.query(Student).all()
    for student in students:
        print('%d, %s %s' % (student.id, student.name, student.kana))

if __name__ == '__main__':
    main()

Ensuite, en tant qu'application, supprimez les données en spécifiant le filtre ou la clause IN.

sqlalchemy_delete.py


# -*- coding:utf-8 -*-
import sqlalchemy
import sqlalchemy.orm
import sqlalchemy.ext.declarative

Base = sqlalchemy.ext.declarative.declarative_base()

class Student(Base):
    __tablename__ = 'students'
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    name = sqlalchemy.Column(sqlalchemy.String(20))
    kana = sqlalchemy.Column(sqlalchemy.String(40))

def main():
    url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'

    engine = sqlalchemy.create_engine(url, echo=False)

    #Créer une table
    Base.metadata.create_all(engine)

    #Créer une session
    Session = sqlalchemy.orm.sessionmaker(bind=engine)
    session = Session()

    #Supprimer toutes les données
    print("====== session.query(Student).delete() =====")
    session.query(Student).delete()
    print_all_students(session)

    #Liste des données à ajouter à la base de données
    student_list = [
        Student(id=1, name='Yu Ishizaka', kana='Yu Ishizaka'),
        Student(id=2, name='Seiichi Sugino', kana='Sugi no Seiichi'),
        Student(id=3, name='Yuko Kuwata', kana='Yuko Kuwata'),
        Student(id=4, name='Ai Kurihara', kana='Kurihara Ai'),
        Student(id=5, name='Hitoshi Sakuma', kana='Sakuma Jin'),
    ]

    #Ajouter une liste de données à la fois
    print("====== session.add_all(student_list) ======")
    session.add_all(student_list)
    print_all_students(session)

    #Supprimer en spécifiant avec un filtre
    print("====== session.query(Student).filter(Student.id==2).delete() =====")
    session.query(Student).filter(Student.id==2).delete()
    print_all_students(session)

    #Supprimer en spécifiant dans la clause IN
    print("====== session.query(Student).filter(Student.id.in_([3, 4])).delete(synchronize_session='fetch') =====")
    session.query(Student).filter(Student.id.in_([3, 4])).delete(synchronize_session='fetch')
    print_all_students(session)

    #Reflété dans la base de données
    session.commit()

#Une fonction qui sort toutes les données du tableau
def print_all_students(session):
    students = session.query(Student).all()
    for student in students:
        print('%d, %s %s' % (student.id, student.name, student.kana))

if __name__ == '__main__':
    main()

Résumé

Puisqu'il existe une méthode appelée add_all dans la classe Session, est-ce delete_all pour supprimer toutes les données? Il semble que certaines personnes le pensent, mais ce n'est pas le cas, alors soyez prudent.

De plus, l'argument par défaut de l'argument de la méthode de suppression synchronize_session est "évaluer", donc si vous le spécifiez dans la clause IN et que vous le supprimez, vous obtiendrez une exception si vous ne spécifiez pas "récupérer". Consultez la documentation officielle (http://docs.sqlalchemy.org/en/rel_1_1/orm/query.html#sqlalchemy.orm.query.Query.delete) pour plus d'informations.

[Message d'erreur] sqlalchemy.exc.InvalidRequestError: Could not evaluate current criteria in Python. Specify 'fetch' or False for the synchronize_session parameter.

Document officiel> API de requête> supprimer (synchronize_session = 'evaluer') http://docs.sqlalchemy.org/en/rel_1_1/orm/query.html#sqlalchemy.orm.query.Query.delete

Recommended Posts

Comment supprimer avec SQLAlchemy?
Comment mettre à jour avec SQLAlchemy?
Comment modifier avec SQLAlchemy?
Comment INNER JOIN avec SQL Alchemy
Comment obtenir l'identifiant du parent avec sqlalchemy
Comment utiliser SQLAlchemy / Connect avec aiomysql
Comment supprimer sélectivement les anciens tweets avec Tweepy
Comment supprimer le journal avec Docker, ne pas collecter le journal
Comment lancer avec Theano
Comment faire RDP sur Fedora31
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
Comment convertir un objet de classe en dictionnaire avec SQLAlchemy
Comment obtenir plus de 1000 données avec SQLAlchemy + MySQLdb
Comment annuler RT avec Tweepy
Python: comment utiliser async avec
Connectez-vous à plusieurs bases de données avec SQL Alchemy
Comment installer python-pip avec ubuntu20.04LTS
Comment gérer les données déséquilibrées
Comment créer / supprimer des liens symboliques
Introduction à RDB avec sqlalchemy II
Comment démarrer avec Scrapy
Comment démarrer avec Python
Comment gérer l'erreur DistributionNotFound
Comment démarrer avec Django
Comment augmenter les données avec PyTorch
Comment supprimer un conteneur Docker
Comment calculer la date avec python
Comment installer mysql-connector avec pip3
Comment installer Anaconda avec pyenv
Comment effectuer un traitement arithmétique avec le modèle Django
[Blender] Comment définir shape_key avec un script
Comment ajouter un package avec PyCharm
Comment supprimer des sessions expirées dans Django
Comment installer DLIB avec 2020 / CUDA activé
Comment utiliser ManyToManyField avec l'administrateur de Django
Comment utiliser OpenVPN avec Ubuntu 18.04.3 LTS
Comment utiliser Cmder avec PyCharm (Windows)
Comment utiliser BigQuery en Python
Comment utiliser Ass / Alembic avec HtoA
Comment gérer les erreurs de compatibilité d'énumération
Comment utiliser le japonais avec le tracé NLTK
Comment faire un test de sac avec python
Comment rechercher Google Drive dans Google Colaboratory
Comment afficher le japonais python avec lolipop
Comment télécharger des vidéos YouTube avec youtube-dl
Comment utiliser le notebook Jupyter avec ABCI
Comment utiliser la commande CUT (avec exemple)
Comment entrer le japonais avec les malédictions Python
Comment installer zsh (avec la personnalisation .zshrc)
Comment regrouper des volumes avec LVM
Comment installer python3 avec docker centos
Comment utiliser le pilote JDBC avec Redash
Comment créer des exemples de données CSV avec hypothèse
Comment lire un fichier CSV avec Python 2/3