Cette fois, j'écrirai la méthode de ** Delete ** avec ** SQLAlchemy **.
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()
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