이전에 진행 했었던 미니 프로젝트에서 flask와 몽고db를 사용 했었지만
나는 아무것도 몰랐어서 엄청난 구글링을 통해서 그냥... 코드 몇 줄을 야매로 바꿔가면서 했었다.
어제 튜터님이 MySQL 강의를 해주셨을때.. DBeaver로 막 MySQL문 쓰는거 따라하다가 중간에 놓쳐서
포기하고 그냥 알고리즘이라도 풀러 나갔었다.
데이터베이스는 엑셀 같은거다... 라고만 알고있었고
DBeaver를 통해서 mysql을 써서 막 insert 하고 create table 하고 뭐 그러다보면 표 같은거 만드는건 알겠는데
flask는 도대체 뭔데....
app.py는 도대체 무슨 파일이고.. flask를 왜 import 하는건데 ㅠㅠ
게다가 flask와 MySQL 연동을 어떻게 하는건데...ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
부트캠프 시작 전에 들었던 '웹 개발 종합반' 강의에선 그냥 따라하라는대로 쳤을뿐이고
외우는거 아니라고 해서 그냥 따라 치기만 했었는데..
왜 수업을 듣는 사람들은 flask를 다 잘 아는거지?
진짜 멘붕 그 자체였다.
그리고 아직도 멘붕중이다.
다행히도 오늘 좋은 강의들을 찾아서
기초적인 MySQL 작성방법과
flask에 대해서 좀 많이 배웠다.
뭔가 많이 배운거 같고
이제 뭔가 감이 잡히고 있는것 같아서
나중에 다 완벽하게 알았을 때, 나 같이 헤매는 사람들을 위해 강좌 글도 쓰고 싶은 욕구가 벌써부터 든다.
flask는 생활코딩에서 강의를 들었는데
생활코딩은 진짜 신인가...? 진짜 내 눈높이에 맞춰서 강의를 해주신다.
from flask import Flask, request, redirect
import random
app = Flask(__name__)
nextId = 4
topics = [
{'id': 1, 'title': 'html', 'body': 'html is ...'},
{'id': 2, 'title': 'css', 'body': 'css is ...'},
{'id': 3, 'title': 'javascript', 'body': 'javascript is ...'}
]
def template(contents, content, id=None):
contextUI = ''
if id != None:
contextUI = f"""
<li><a href="/update/{id}/">update</a></li>
<li><form action="/delete/{id}" method="POST"><input type="submit" value="delete"></form></li>
"""
return f'''<!doctype html>
<html>
<body>
<h1><a href="/">WEB</a></h1>
<ol>
{contents}
</ol>
{content}
<ul>
<li><a href="/create/">create</a></li>
{contextUI}
</ul>
</body>
</html>
'''
def getContents():
liTags = ''
for topic in topics:
liTags = liTags + \
f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
return liTags
@app.route('/')
def index():
return template(getContents(), '<h2>Welcome</h2>Hello, WEB')
@app.route('/create/', methods=['GET', 'POST'])
def create():
if request.method == 'GET':
content = '''
<form action="/create/" method="POST">
<p><input type="text" name="title" placeholder="title"></p>
<p><textarea name="body" placeholder="body"></textarea></p>
<p><input type="submit" value="create"></p>
</form>
'''
return template(getContents(), content)
elif request.method == 'POST':
global nextId
title = request.form['title']
body = request.form['body']
newTopic = {'id': nextId, 'title': title, 'body': body}
topics.append(newTopic)
url = '/read/'+str(nextId)+'/'
nextId = nextId + 1
return redirect(url)
@app.route('/read/<int:id>/')
def read(id):
title = ''
body = ''
for topic in topics:
if id == topic['id']:
title = topic['title']
body = topic['body']
break
return template(getContents(), f'<h2>{title}</h2>{body}', id)
@app.route('/update/<int:id>/', methods=['GET', 'POST'])
def update(id):
if request.method == 'GET':
title = ''
body = ''
for topic in topics:
if id == topic['id']:
title = topic['title']
body = topic['body']
break
content = f'''
<form action="/update/{id}/" method="POST">
<p><input type="text" name="title" placeholder="title" value="{title}"></p>
<p><textarea name="body" placeholder="body">{body}</textarea></p>
<p><input type="submit" value="update"></p>
</form>
'''
return template(getContents(), content)
elif request.method == 'POST':
global nextId
title = request.form['title']
body = request.form['body']
for topic in topics:
if id == topic['id']:
topic['title'] = title
topic['body'] = body
break
url = '/read/'+str(id)+'/'
return redirect(url)
@app.route('/delete/<int:id>/', methods=['POST'])
def delete(id):
for topic in topics:
if id == topic['id']:
topics.remove(topic)
break
return redirect('/')
app.run(port=5001, debug=True)
그리고
MySQL은 여기서 들었다.
한빛미디어
여기는 완전 핵 기초부터 설명을 해주셔서 완전 만족스러웠다.
-- 데이터베이스 생성
CREATE DATABASE `shop_db`;
-- 테이블 생성
-- 학생 테이블 생성
CREATE TABLE shop_db.product(
product_name CHAR(4) PRIMARY KEY
,
cost INT NOT NULL
,
make_date DATE
,
company CHAR(5)
,
amount INT NOT NULL
);
-- 학생테이블 수정(city_id)추가 및 외래키
ALTER TABLE student ADD city_id int,
ADD CONSTRAINT `fk_city_table_id` FOREIGN KEY student(city_id) REFERENCES city(id);
SELECT
s.name, c.name
FROM
student s
INNER JOIN city c ON
s.city_id = c.id;
-- 도시 테이블 생성
CREATE TABLE city(
id int PRIMARY KEY AUTO_INCREMENT
,
name varchar(50) NOT NULL
)
-- 도시 데이터 생성
INSERT
INTO
`member` (
member_id
, member_name
, member_addr
)
VALUES(
'carry'
, '머라이어'
, '미국 텍사스 사막'
);
-- 학생 데이터 입력
INSERT
INTO
product (
product_name
, cost
, make_date
, company
, amount
)
VALUES(
'바나나'
, '1500'
, '2021-07-01'
, '델몬트'
, '17'
)
,(
'카스'
, '2500'
, '2022-03-01'
, 'OB'
, '3'
)
,(
'삼각김밥'
, '800'
, '2023-09-01'
, 'CJ'
, '22'
);
-- 학생 이메일 업데이트
UPDATE
`member`
SET
member_addr = '영국 런던 먹자골목'
WHERE
member_id = 'carry';
-- 학생 검색 (이메일)
SELECT * FROM student s
WHERE email LIKE "%@naver.com"
-- 학생 데이터 삭제
DELETE
FROM
member
WHERE
member_id = 'carry';
-- 특정 유저 조회
SELECT * FROM member WHERE member_name = '아이유';
-- 인덱스 생성
CREATE INDEX inx_member_name ON member(member_name);
-- 뷰(바로가기) 생성
CREATE VIEW member_view AS
SELECT
*
FROM
MEMBER;
SELECT * FROM member_view;
-- 스토어드 프로시저 만들기 ㅋㅋㅋ
DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
SELECT * FROM member WHERE member_name = '나훈아';
SELECT * FROM product WHERE product_name = '삼각김밥';
END //
DELIMITER ;
-- 스토어드 프로시저 삭제
DROP PROCEDURE IF EXISTS myProc;
-- 스토어드 프로시저 부르기
CALL myProc();
아직 MySQL과 flask 연동하는 법은 모르지만..
그건 내일 알아보려고 한다.. 너무 졸립다.. 쓰러질것 같아..