[英]SQLAlchemy delete all items and not just the first
我正在嘗試從數據庫中刪除一些數據記錄。 我進行了級聯操作,還刪除了與數據記錄相關的所有內容。 現在的問題是,如果我有多個具有相同name屬性的數據記錄,而我想全部刪除它們該怎么辦。 例如,我有3個數據記錄,兩個記錄的屬性name = Max
,最后一個記錄的屬性name = Peter
。 現在如何刪除兩個Max? 這是我到目前為止得到的代碼:
def delete_anw(engine):
Session = sessionmaker(bind=engine)
session = Session()
f = session.query(Anwendung).filter_by(name="Max").first()
session.delete(f)
session.commit()
此代碼僅刪除找到的第一個查詢。 我知道這是由於first()
但是有沒有像all()
這樣的方法來刪除所有名稱為Max的數據記錄?
只需刪除.first()
方法並向查詢本身添加delete
session.query(Anwendung).filter_by(name="Max").delete()
http://docs.sqlalchemy.org/zh-CN/latest/orm/query.html#sqlalchemy.orm.query.Query.delete查看該內容以供參考
'''
Created on 2017年10月24日
@author: leemengwei
'''
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column,Integer,String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Anwendung(Base):
__tablename__ = 'tab1'
id = Column(Integer, primary_key=True)
name = Column(String)
def delete_anw():
session = Session()
f = session.query(Anwendung).filter_by(name="Max").delete()
print('records deleted:',f)
session.commit()
session.close()
def query_anw():
session = Session()
f = session.query(Anwendung).filter_by(name="Max").all()
print('records matched:',len(f))
session.close()
if __name__=='__main__':
engine = create_engine("mysql+pymysql://root@localhost/test",echo=True)
Session = sessionmaker(bind=engine)
query_anw()
delete_anw()
query_anw()
上面的代碼對我來說很好用。找到並刪除了記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.