Flask-SQLAlchemy에서 ID로 레코드 삭제하기
필수 조건:
- Flask 설치
- Flask-SQLAlchemy 설치
- 데이터베이스 설정
단계:
- 삭제할 레코드 가져오기:
session.query()
를 사용하여 삭제할 레코드를 위한 쿼리 객체를 만듭니다.filter_by()
메서드를 사용하여id
속성을 기준으로 레코드를 필터링합니다.first()
메서드를 사용하여 일치하는 첫 번째 레코드를 가져옵니다.
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
email = db.Column(db.String(120))
@app.route('/delete_user/<int:user_id>', methods=['POST'])
def delete_user(user_id):
user = User.query.filter_by(id=user_id).first()
if user:
db.session.delete(user)
db.session.commit()
return redirect('/users')
else:
return '해당 ID의 사용자를 찾을 수 없습니다.'
- 레코드 삭제:
user = User.query.filter_by(id=user_id).first()
if user:
db.session.delete(user)
db.session.commit()
return redirect('/users')
else:
return '해당 ID의 사용자를 찾을 수 없습니다.'
- 세션 커밋:
db.session.commit()
주의:
delete()
메서드는 영구적이며 삭제된 레코드를 복구할 수 없습니다.- 삭제하려는 레코드가 다른 레코드에 참조되고 있는지 확인하십시오. 참조된 레코드를 삭제하면 오류가 발생할 수 있습니다.
Flask-SQLAlchemy에서 ID로 레코드를 삭제하는 예제 코드
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
email = db.Column(db.String(120))
@app.route('/delete_user/<int:user_id>', methods=['POST'])
def delete_user(user_id):
user = User.query.filter_by(id=user_id).first()
if user:
db.session.delete(user)
db.session.commit()
return redirect('/users')
else:
return '해당 ID의 사용자를 찾을 수 없습니다.'
if __name__ == '__main__':
app.run(debug=True)
이 코드에서:
app
은 Flask 애플리케이션 인스턴스입니다.SQLALCHEMY_DATABASE_URI
는 SQLite 데이터베이스 파일의 경로를 설정합니다.db
는 Flask-SQLAlchemy SQLAlchemy 인스턴스입니다.User
는 데이터베이스 테이블을 나타내는 Flask-SQLAlchemy 모델 클래스입니다.delete_user()
함수는 사용자를 ID로 삭제하는 데 사용됩니다.user = User.query.filter_by(id=user_id).first()
은 삭제할 사용자를 가져옵니다.db.session.delete(user)
는 사용자를 삭제합니다.db.session.commit()
은 변경 사항을 데이터베이스에 커밋합니다.
코드 실행:
- 코드를 파일에 저장합니다 (예:
delete_user.py
). - 다음 명령을 사용하여 Flask 애플리케이션을 실행합니다.
python delete_user.py
- 웹 브라우저에서
http://localhost:5000/delete_user/1
로 이동하면 ID가 1인 사용자가 삭제됩니다.
참고:
- 이것은 기본 예제이며 실제 응용 프로그램에서는 더 많은 오류 처리 및 유효성 검사를 추가해야 할 수 있습니다.
- 다른 데이터베이스를 사용하는 경우
SQLALCHEMY_DATABASE_URI
설정을 변경해야 합니다.
Flask-SQLAlchemy에서 ID로 레코드를 삭제하는 대체 방법
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
email = db.Column(db.String(120))
@app.route('/delete_user/<int:user_id>', methods=['POST'])
def delete_user(user_id):
db.session.delete(User(id=user_id))
db.session.commit()
return redirect('/users')
session.query()를 사용하여 쿼리 객체를 만들고 filter_by() 및 delete() 메서드를 차례대로 호출합니다.
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
email = db.Column(db.String(120))
@app.route('/delete_user/<int:user_id>', methods=['POST'])
def delete_user(user_id):
session.query(User).filter_by(id=user_id).delete()
db.session.commit()
return redirect('/users')
Model.delete() 메서드를 사용합니다.
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
email = db.Column(db.String(120))
@app.route('/delete_user/<int:user_id>', methods=['POST'])
def delete_user(user_id):
user = User.query.get(user_id)
if user:
user.delete()
db.session.commit()
return redirect('/users')
else:
return '해당 ID의 사용자를 찾을 수 없습니다.'
각 방법의 장단점:
delete()
메서드를 사용하여 직접 ID를 전달합니다.- 장점: 간결하고 명확합니다.
- 단점: 실수로 잘못된 ID를 전달하면 예기치 않은 삭제가 발생할 수 있습니다.
session.query()
를 사용하여 쿼리 객체를 만들고filter_by()
및delete()
메서드를 차례대로 호출합니다.- 장점: 쿼리 객체를 사용하여 추가적인 필터링 또는 조작을 수행할 수 있습니다.
- 단점: 코드가 조금 더 복잡합니다.
Model.delete()
메서드를 사용합니다.- 장점: 모델 인스턴스를 사용하여 삭제를 수행하기 때문에 코드가 더 명확하고 읽기 쉽습니다.
- 단점: 사용하려면 먼저 모델 인스턴스를 가져와야 합니다.
python flask sqlalchemy