prosource

플라스크-SQLAChemy 단일 테이블의 모든 행을 모두 삭제하는 방법

probook 2023. 8. 16. 22:27
반응형

플라스크-SQLAChemy 단일 테이블의 모든 행을 모두 삭제하는 방법

Flask-SQ를 사용하여 단일 테이블의 모든 행을 삭제하려면 어떻게 합니까?라케미?

다음과 같은 것을 찾는 중:

>>> users = models.User.query.all()
>>> models.db.session.delete(users)

# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped

시도:

models.User.query.delete()

문서에서:Returns the number of rows deleted, excluding any cascades.

Daz Worrall의 대답은 정확합니다.다음은 코드가 OP와 다르게 구성된 경우 유용할 수 있는 변형입니다.

num_rows_deleted = db.session.query(Model).delete()

또한 다음 스니펫에서와 같이 커밋할 때까지 삭제가 적용되지 않습니다.

try:
    num_rows_deleted = db.session.query(Model).delete()
    db.session.commit()
except:
    db.session.rollback()

플라스크-Sqalchemy

모든 레코드 삭제

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

삭제된 단일 행

여기서 DB는 객체 Flask-SQ입니다.LA 화학 수업.모든 레코드를 삭제하고 특정 레코드를 삭제하려면 시도합니다.filter쿼리의 절. ex.

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

개체별 단일 레코드 삭제

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

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

원시 SQL 명령을 작성하는 것은 때때로 유용합니다.

    def delete_table_content(self, table_name: str):
          "deletes table contents"
          CONNECTION = db_url
          conn = psycopg2.connect(CONNECTION)
          conn.autocommit = True
          cursor = conn.cursor()
          cursor.execute("TRUNCATE TABLE {}".format(table_name))
          logger.warning("deleted table {} content".format(table_name))

여러 유형의 테이블이 있는 응용 프로그램이 있는 경우, 다음과 같이 삭제 단추의 URL에 ID와 TYPE을 전달합니다.

<a href="{{ url_for('app.cleartable',type='items') }}" class="btn btn-danger">
    <i class="fas fa-trash fa-fw"></i>
    Clear table
</a>

이제 당신이 요청하면.'/delete/<string:type>/<int:id>'텍스트 문자열의 값을 사용하여 삭제하고 다음으로 리디렉션합니다.url항목별로

@app.route('/delete/<string:type>/<int:id>', methods=['POST', 'GET'])
def delete(type, id):
    if type == "item":
        to_delete = Item.query.get(id)

        try:
            db.session.delete(to_delete)
            db.session.commit()
            flash(f'{to_delete.name} successfully deleted!', 'success')
        except:
            db.session.rollback() 
            flash(f'{to_delete.name} failed to delete!', 'error')
        return redirect(url_for('items'))

언급URL : https://stackoverflow.com/questions/16573802/flask-sqlalchemy-how-to-delete-all-rows-in-a-single-table

반응형