【问题标题】:python + SQLAlchemy: deleting with the Session objectpython + SQLAlchemy:使用 Session 对象删除
【发布时间】:2014-10-30 01:48:57
【问题描述】:

我不太明白这一点:我想从匹配查询的表中删除所有记录。有点像这样。

engine = sqlalchemy.create_engine(string)
meta = MetaData(bind=engine)
meta.reflect(bind=engine, schema='myschema')

Base = automap_base(metadata=meta)
Base.prepare(engine, reflect=True)
Classes = Base.classes

Session = sessionmaker(bind=engine)
session = Session()

session.delete(plays.record_id == '123')

但这不起作用。这里有什么想法?我得到的错误是:

error in parsing record ID 020087: Class 'sqlalchemy.sql.elements.BinaryExpression' is not mapped

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    在 SQL Alchemy 中,您正在删除通过数据库查询获得的对象。您可以通过 2 种方式做到这一点:

    使用查询删除(只会发出一条DELETE 语句):

    session.query(User).filter(User.id==7).delete()
    session.commit()
    

    删除查询返回的对象实例(将发出 2 个语句:首先是 SELECT,然后是 DELETE):

    obj=session.query(User).filter(User.id==7).first()
    session.delete(obj)
    session.commit()
    

    【讨论】:

      【解决方案2】:

      删除所有记录

      #for all records
      session.query(Model).delete()
      session.commit()
      

      已删除单行

      如果您想删除特定记录,请尝试查询中的filter 子句。 例如。

      #for specific value
      session.query(Model).filter(Model.id==123).delete()
      session.commit()
      

      按对象删除单个记录

      record_obj = session.query(Model).filter(Model.id==123).first()
      session.delete(record_obj)
      session.commit()
      

      https://flask-sqlalchemy.palletsprojects.com/en/2.x/queries/#deleting-records

      【讨论】:

      • 你救了我兄弟。感谢您分享您的技能。在您的帮助下,当从数据库中删除父级的所有记录时,我能够删除关联表中的所有记录(多对多关系)
      猜你喜欢
      • 2013-11-13
      • 1970-01-01
      • 2018-12-27
      • 2014-02-06
      • 2013-10-12
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多