많은 분들이 도와주셔서, 어떻게던 해볼 수 있었다 ㅠㅠㅠㅠ 나중에 플젝할때, 돌아와서 해보면 별거 아닐거라고 믿는다...
Flask를 DB랑 연동하기
from flask import Flask, jsonify, request
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
# app start 필요 없음
db = SQLAlchemy(app)
Flask에 SQLAlchemy를 import하였다. 이것의 경우에는 내부에 SQL문 작성 필요 없이 class형태로 구현할 수 있다.
Flask를 DB랑 연동하기
class Menus(db.Model):
id = db.Column(db.Integer, primary_key = True, index = True)
name = db.Column(db.String(120), nullable = False)
price = db.Column(db.Integer, nullable = False)
def __repr__(self):
return '<menu %r>' % self.id
# 첫 시작에 db 생성을 위해 반드시 필요
db.create_all()
class를 지정하여, 데이터 테이블을 생성하자, 이 때 이후 db.create_all()을 잊지 말자!
CRUD의 구현
# Get /menus | 자료를 가지고 옴 (READ)
@app.route('/menus')
def get_menus():
return jsonify([
{'id':menu.id,
'name':menu.name,
'price':menu.price
} for menu in Menus.query.all()])
# POST /menus | 자원 추가 (CREATE)
@app.route('/menus', methods=['POST'])
def post_menu(): # request가 JSON이라고 가정한다.
# 전달받은 자료를 menus 자원에 추가함
request_data = request.get_json()
new_menu = Menus(name=request_data['name'],
price=request_data['price'])
db.session.add(new_menu)
db.session.commit()
return jsonify([
{'id': menu.id,
'name': menu.name,
'price': menu.price
} for menu in Menus.query.all()])
@app.route('/menus/<int:id>', methods=['PUT'])
def put_menu(id):
alter_menu = Menus.query.get_or_404(id)
update_data = request.get_json()
alter_menu.name = update_data['name']
alter_menu.price = update_data['price']
db.session.commit()
return jsonify([
{'id': alter_menu.id,
'name': alter_menu.name,
'price': alter_menu.price
}])
@app.route('/menus/<int:id>', methods=['DELETE'])
def delete_menu(id):
del_menu = Menus.query.get_or_404(id)
db.session.delete(del_menu)
db.session.commit()
return jsonify([
{'id': menu.id,
'name': menu.name,
'price': menu.price
} for menu in Menus.query.all()])
for menu in Menus.query.all()은 특별한 것이 아닌 "반복문"이다. 그저, 쿼리에 있는 모든 데이터를 보여주기 위해 넣은 구문이다. 무서워하지 말자.
데이터에 변환이 생길 경우 commit을 때려야 한다.
'프로그래밍 언어' 카테고리의 다른 글
[Python] Django로 웹 페이지 만들기 (2) (0) | 2021.05.15 |
---|---|
[Python] Django로 웹페이지 만들기 (1) (0) | 2021.05.11 |
[Python] Flask (1) Flask란?, CRUD의 구현 (0) | 2021.05.07 |
[기본이론] defaultdict()의 활용법 (0) | 2021.04.29 |
[자료] Python으로 배우는 자료구조 (4) Heap (0) | 2021.04.21 |