Dieses Mal werde ich die Methode ** Löschen ** mit ** SQLAlchemy ** schreiben.
Durchsuchen Sie zunächst einfach die Tabelle nach Daten, deren Spalte "Name" "Yuko Kuwata" lautet, und löschen Sie sie.
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)
#Tabelle erstellen
Base.metadata.create_all(engine)
#Erstellen Sie eine Sitzung
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
#Löschen Sie alle Daten
session.query(Student).delete()
#Liste der Daten, die der Datenbank hinzugefügt werden sollen
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'),
]
#Datenliste sofort hinzufügen
session.add_all(student_list)
#Suchen Sie nach zu löschenden Daten
found_student = session.query(Student).filter_by(name='Yuko Kuwata').first()
#Löschen Sie die angegebenen Daten
session.delete(found_student)
#Geben Sie alle Daten in der Tabelle aus
print_all_students(session)
#Reflektiert in der Datenbank
session.commit()
#Eine Funktion, die alle Daten in der Tabelle ausgibt
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()
Löschen Sie als Anwendung als Anwendung die Daten, indem Sie den Filter oder die IN-Klausel angeben.
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)
#Tabelle erstellen
Base.metadata.create_all(engine)
#Erstellen Sie eine Sitzung
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
#Löschen Sie alle Daten
print("====== session.query(Student).delete() =====")
session.query(Student).delete()
print_all_students(session)
#Liste der Daten, die der Datenbank hinzugefügt werden sollen
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'),
]
#Datenliste sofort hinzufügen
print("====== session.add_all(student_list) ======")
session.add_all(student_list)
print_all_students(session)
#Löschen Sie durch Angabe mit einem Filter
print("====== session.query(Student).filter(Student.id==2).delete() =====")
session.query(Student).filter(Student.id==2).delete()
print_all_students(session)
#Löschen Sie durch Angabe in der IN-Klausel
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)
#Reflektiert in der Datenbank
session.commit()
#Eine Funktion, die alle Daten in der Tabelle ausgibt
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()
Ist es delete_all, alle Daten zu löschen, da es in der Session-Klasse eine Methode namens add_all gibt? Es scheint, dass einige Leute das denken, aber es ist nicht so, also sei vorsichtig.
Das Standardargument des Löschmethodenarguments synchronize_session lautet außerdem'evaluate '. Wenn Sie es also in der IN-Klausel angeben und löschen, erhalten Sie eine Ausnahme, wenn Sie'fetch' nicht angeben. Weitere Informationen finden Sie in der offiziellen Dokumentation (http://docs.sqlalchemy.org/en/rel_1_1/orm/query.html#sqlalchemy.orm.query.Query.delete).
[Fehlermeldung]
sqlalchemy.exc.InvalidRequestError: Could not evaluate current criteria in Python. Specify 'fetch' or False for the synchronize_session parameter.
Offizielles Dokument> Abfrage-API> Löschen (synchronize_session = 'evaluieren') http://docs.sqlalchemy.org/en/rel_1_1/orm/query.html#sqlalchemy.orm.query.Query.delete
Recommended Posts