[개발일지 3월 31일] [공통교육-파이썬 기초] 데이터베이스 Python 연동 - 이고잉 강사

박재준·2022년 3월 31일
0
post-thumbnail

1. 학습한 내용

필기

  • glitch terminal에서
    pip install flask 하면 플라스크가 설치됨

  • 프레임워크 : 함수를 체계적으로 만들어놓으면 호출할 수 있는 것 (라이브러리) / 입력했을 때 서버와 웹 브라우저가 통신하는 통신내역을 볼 수 있음 (밑의 그림)

  • Get방식 ? : 각각의 웹페이지 고유 식별자
    웹브라우저에서 get은 고유한 페이지를 식별해서 다운로드 받을 때!

  • post : 브라우저에 어떤 정보를 수정, 삭제, 로그인 등 하는 작업은 읽는게 아니라 쓰는 것!
    <form action="/create/" method="POST">


→ POST 오류 창
→ 이 포스트는 현재 허용되고 있지 않는다.

  • Payload : 네트워크 통신 중 우리가 입력한 body 같은 내용(URL이 아닌 제 3의 방법)

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

  • Flask → QuickStart → HTTP Method(웹과 웹브라우저 간의 통신 규칙 방법)(css)(png)(js)
    관련 사이트

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

@app.route('/create_process/', methods=['POST'])
def create_process():
  
  return 'Success!‘

→ 서버에서 동작
→ return값을 서버가 웹 브라우저에게 응답해줌
→ 웹브라우저가 화면에 success! 표시

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

from flask import Flask, request

@app.route('/create_process/', methods=['POST'])
def create_process():
  title = request.form['title']
  return title

→ return title을 통해서 title을 불러옴(관련 사이트)

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

from flask import Flask, request


app = Flask(__name__)

topics = [
  {"id":1, "title":"html", "body":"html is ...."},
  {"id":2, "title":"css", "body":"css is ...."},
  {"id":3, "title":"js", "body":"js is ...."}
]
nextId = 4



def template(content):
  liTags = ''
  for topic in topics:
    liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
  return f'''
  <html>
    <body>
      <h1><a href="/">WEB</a></h1>
      <ol>
        {liTags}
      </ol>
      {content}
      <ul>
        <li><a href="/create/">create</a></li>
      </ul>
    </body>
  </html>
  '''

@app.route("/")
def index():
  return template('<h2>Welcome</h2>Hello, WEB!')

@app.route("/read/<int:id>/")
def read(id):
  title = ''
  body = ''  
  for topic in topics :
    if topic['id'] == id:
      title = topic['title']
      body = topic['body']
      break;
  return template(f'<h2>{title}</h2>{body}')

@app.route('/create/')
def create():
  content = '''
    <form action="/create_process/" 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(content)

@app.route('/create_process/', methods=['POST'])
def create_process():
  global nextId  #함수 밖 (전역) 설정
  title = request.form['title']
  body = request.form['body']
  newTopic = {"id": nextId , "title" : title, "body": body}
  topics.append(newTopic)  #newTopic에 추가한 내용이 topics의 끝에 추가
  nextId = nextId + 1
  return f'success!! go: /read/{nextId-1}/'  #nextId를 써어 행을 추가했으니까 1이 증가되어있음
  #우리가 다시 돌아가려는 곳은 nextId 증가되기 전이니까 -1해서 돌아감


# @app.route('/update/')
# def update():
#   return 'Update'

app.run()

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

  • Redirects and Errors 사이트의 참고 내용(밑의 그림)
  • redirection!(밑의 코딩은 참고)
@app.route('/redirect/')
def a():
  
  return redirect('/')
  • TIp
    혼자 오늘 공부했던거 공부할 수 있는 영상!(관련 사이트)

  • 데이터가 폭발적으로 증가할 수 있는 계기 : 웹의 등장!
    이전의 정보 관리시스템 : 데이터베이스(1970년대~)
    그래서 데이터베이스와 웹을 함께 만들어서 세트라고 생각하는 경우가 많지만, 데이터베이스는 그 자체로 쓸모있음!
    데이터베이스는 관계형, 계층형, 문서형, 등등의 패러다임이 존재(제품의 타입들)
    관련 사이트(밑에 그림) 참고
    → 전반적으로 ‘관계형 데이터베이스’가 절대강자!

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

  • SQLite 관계형 데이터베이스 수업 시작
    파이썬에는 SQLite가 내장되어 있음
    SQLite : 설치 사이트(설치함)(바탕화면\대구 AI 스쿨 사업)
    대구 AI 스쿨사업 \ SQLite3 폴더에 만들 표가 계속 저장됨

  • TIP
    표가 많아지면 서로 연관된 표를 그룹핑해서 이름 붙여서 정리정돈 할 때,
    엑셀 : 하나하나의 워크시트가 모여서 하나의 파일을 이룸
    데이터베이스 : 하나하나가 표, 연관된 표를 그룹핑한 것이 데이터베이스(스키마) (=엑셀 파일 하나)

  • glitch에서 termianl → sqlite3 실행
    → sqlite3 명렁어로 실행됨

  • .open topics.sqlite3 살행
    → sqlite3의 파일이 생겼음
    .exit → 나가게됨

  • ls라고 실행 → 파일 목록 나옴

  • sqlite3 topics.sqlite3 라고 치면 → topics 파일 들어옴

  • (글리치에서 데이터베이스)(문법 : 대문자 / 값 : 소문자)
    terminial에서 CREATE TABLE topics 치고 엔터
    id INTEGER PRIMARY KEY라고 치고 엔터

  • DDL : Data Definition Language

  • NOT NULL : NULL값을 열에 받아들이지 못하도록 만드는 것

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

  • SQL(Structured Query Language) : 구조화된(표를 의미) 질의(요청하다) 언어
    핵심작업 : CRUD(관련 사이트)


→ glitch에서 create를 통한 표를 만들기
→ topics란 표가 만들어짐

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


→ topics 우측클릭 → Add a column 클릭하면(밑의 그림)

→ column 넣을 때 다양하게 넣을 수 있음
→ id / INTEGER / Primary Key
→ title / TEXTC / Not NULL 추가함

→ SQLiteStudio에서 표가 만들어짐

  • SQLiteStudio에서 표 안에 데이터 넣기
    topics 파일에서 → Open SQL &editor(Alt + E) 클릭 →
    INSERT INTO topics (title, body) VALUES('ORACLE', 'OCRACLE is ...');
    데이터 삽입 후 → 재생버튼(Execute Query)(F9)
    → 데이터 삽입 완료 (밑에 그림 참고)

2. 학습한 내용 중 어려웠던 점 또는 해결못한 것들

1) glitch의 라우트 설정, 각 함수 및 변수 호출문들
2) SQLite3에 대한 익숙하지 않은 기능들

3. 해결방법 작성

1) 전반적인 코딩 내용을 큰 테투리에서 파악하는 것 → 작동 순서와 방법을 알 것(X2)
2) 했던 내용들을 반복함으로써 익숙해지기

4. 학습 소감

1) 아직까지 프로그램 자체에 대해 익숙하지 않은 것 같다... 코딩하는데도 시간이 좀 더 걸리고, 코딩하다보면 수업내용 못 따라갈 것 같고...
2) 어떤 식으로 호출이 되고, 그런 흐름을 파악하는 것이 정말... 힘들다

profile
초급 개발자

0개의 댓글