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