簡體   English   中英

SQLAlchemy刪除所有項目,而不僅僅是第一個

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM