오늘은 변수와 반복문으로 코딩해놓았던 것을 데이터베이스파일을 글리치 터미널에서 직접 만든 후 그 데이터베이스파일을 직접 불러오는 코드로 다 변경했다.
터미널을 켜서 .open db.sqlite3
이라고하면 db라는 sqlite3파일이 생성된다.
파일을 생성시키고 constraint를 설정해서 ,,); 이라고 치고 엔터하면 그 조건에 맞는 데이터베이스를 생성할 수 있게된다.
삽입은
INSERT INTO TOPICS (title,body) VALUES ('SQLite','SQLite is ...')
이렇게 하면 파일에 title과 body가 삽입이 된다.
만약에 실수했으면 DROP TABLE db라고 해서 제거 후 다시 만들어준다. ALTER라는 테이블 수정 명령이 있지만 사용하기가 까다롭다.
데이터베이스 파일을 만든 후 웹코드를 만들어놓은 server.py에 데이터베이스파일을 이용하여 자료를 꺼내오는 코드를 다시 작성한다.
※python에는 sqlite3이 내장되어있다!※

◈데이터베이스에 객체추가방법. (creat.py)
일단 보는 것처럼 import sqlite3을 써서 sqlite3을 불러오고,
conn이라는 변수 이름을 지정해주고 sqlite3.connect('db.sqlite3') sqlite3의 db파일을 connect함수를 사용하여 불러온다.
conn의 커서를 curor = conn.cursor()로 지정해주고,
curor을 실행하여 명령문을 작성하는 execute 함수와 함께 INSERT INTO VALUES 추가명령문을 작성한다.
이 때, VALUES의 값은 (?,?)으로 지정하고 작은따옴표 뒤에 콤마를 넣고 무엇을 넣을지 (,) 안에 적어준다.
그리고 항상 마무리는 conn.close()로 close함수로 꼭 닫아줘야한다.

◈데이터베이스에서 객체를 읽어들이는 방법. (read.py)
추가방법과 똑같이 import로 모듈설정을 하고, cursor함수까지 쓰는 것은 똑같으나, fetch함수를 사용하는것이 다르다. fetch함수는 데이터를 가져와주는 함수고, fetchall은 모든 것을 읽는다는 뜻이다.



이제 다시 server.py에 돌아와서 지금까지 한 데이터베이스 파일을 사용하여 웹에 자료를 불러오는 코드를 위의 코드를 사용하여 바꿔보았다.
①template 함수로 가서 cs = execute('SELECT * FROM topics')로 topics 테이블에서 조건없이 모든 자료를 선택하는 함수를 쓰고, topics = cs.fetchall()로 모든 데이터자료를 가져와준다. 그리고 나서 litags의 링크에서 {topic[1]}을 클릭하면 /read/{topic[0]}/의 url주소로 넘어 갈 수 있게 설정한다.
②홈에 있을때 return template(f'<'h2>{title}<'/h2>{body}',id)를 설정하고 데이터베이스를 불러오는데, 이때는 execute 함수에 SELECT문을 WHERE을 사용하여 조건을 넣어준다. WHERE id=?',(id,))로 조건을 작성해준다.☆여기서 (id 뒤에 (콤마),를 찍는 이유는 그냥 (id)라고 작성하면 id 라는 값이 나온다. 그래서 (id,)를 해줘야 튜플로 만들 수 있다. 그리고 여기서는 id값만 읽으면 되니 하나만 읽는 fetchone()함수를 사용한다.
그리고나서 아까 template에 설정한 title과 body값을
title = topic[1]
body = topic[2]
를 사용하여 위치에 맞는 데이터를 불러온다.
③/create_process/페이지에 있을 때,
title = request.form['title']
body = request.form['body']
request.form을 지정 해 준 후에
execute에 INSERT INTO VALUES를 넣어 INSERT추가문을 실행시키고, 마지막으로 id = cs.lastrowid를 실행시키는데 .lastrowid는 마지막으로 추가되거나 변경된 레코드의 번호를 나타낸다고한다. 그리고 변경을 기록해주는 conn.commit()함수를 쓰고 마지막으로 close함수로 닫아준다.
이렇게 하고나면 title과 body에 타이핑을 해서 create버튼을 누르면 목록과 클릭했을때 나오는 내용이 등록이 된다.
④/delete/<'int:id>/페이지에 있을 때,
execute에 DELETE FROM WHERE문으로 삭제문을 실행시키게 작성한다. cs.execute('DELETE FROM topics WHERE id=?',(id,))로 작성해서 명령문을 넣어주고, commit함수를 사용하여 변경을 기록해주고 close로 닫아준 후, return redirect('/')으로 마무리한다. 그러고 나면 내가 선택한 페이지가 삭제되고 홈으로 redirection이 된다.
▣그 다음엔 https://getbootstrap.com/이라는 페이지를 알려주셨는데, 여기서 홈페이지를 여러가지로 꾸밀 수 있는 코드들이 있었다.
버튼 모양, 위치, 색을 바꾸고 내가 만든 코드의 웹 출력내용을 중간으로 옮기는 등의 여러가지 내용이 있었다.
※마지막으로 삭제버튼은 홈에서는 보이지않고,
페이지를 들어갔을때만 생성되는게 좋은데
(어차피 홈에서는 삭제를 할 것도 없고, 읽을 수 있는 id도 없으니 에러가 난다.)
그 부분에 대해서 마지막으로 알려주셨다.
contextUI=''
if id != None:
contextUI = '<'input type="submit" value="delete" class="btn btn-danger">
(class부분은 부트스트랩에서 따온 내용)
을 설정해주고,버튼이 들어갈 장소에 {contextUI}
를 추가해주면 내가 만들고 싶은 장소에 홈버튼이 아닌 페이지를 들어갔을때만 생성이된다!☆★☆★☆★
역시나 강사님과 같이 하면 왜 저기에 저게 들어가는지 이제 어렵풋이 이해는 되지만, 혼자 백지에서부터 만들라한다면 막막하다. 나도 엄청 잘하고싶다.
강사님 수업 복습하기, 강사님 사이트 or 유튜브에서 영상을 보면서 공부하기, 만들어진 코드 계속 보면서 눈에 익히기.
오늘 이고잉 강사님의 마지막 수업이었다. 너무너무 재미있게 잘 들었던 수업이라 너무 아쉽고 슬펐다. 6개월 내내 이고잉님께 코딩 수업을 들어도 열심히 들을 수 있을 것 같다. 잘하지 못해도 잘 독려해주시며 복습을 잘하고 기본기를 탄탄하게 하라 해주시니 항상 용기가 나고 열심히 할 수 있는 버팀목이 되어주시는 선생님이다. 언제 또 볼 수 있을지 모르겠지만 또 배우고싶은 선생님이고, 이 자리를 빌어서 이때까지 초보자인 나를 재미있게 수업해주시고 이끌어와주셔서 고맙다고 말씀드리고싶다.