본문 바로가기

Project/Python

Blog project -SQLAlchemy

Blog project

SQLAlchmy

 

 "개발자들은 게으름을 지향합니다." 

 언뜻 이해가 되지 않는 명제이기도 합니다.  흔히 개발자 (혹은 프로그래머)를 떠올리면 일반인들에게는 정해진 심상이 있습니다. 영화나 드라마를 통해 낮밤없이 일하는 사람을 떠올리게 됩니다.  아무도 보지 않는 어두운 방에 홀로 앉아 누구와도 이야기 하지 않고 무섭게 키보드를 두들기는 사람 같은 느낌입니다. 하지만 대부분의 개발자는 깔끔하게 차려입고 회사에 출근하여 정해진 시간동안 특정한 문제를 해결하거나 기능들을 개선 혹은 개발 합니다. 물론 전통적인 제조업 보다는 규율에서 자유롭지만 그 것은 효율성을 위한 선택일뿐 입니다. 어떤 회사에서는 그런 자율마저 주어지지 않는 회사도 많이 있습니다. 그 어떤 경우든 밤낮없이 일하는 모습으로 그려집니다. 

 그런 조직에 속해 있는 개발자들도 혹은 프리랜서 처럼 혼자 일하는 분들도 반복작업을 싫어 합니다. 물론 놀이로 컴퓨터를 가지고 노는 것은 즐겁습니다. 하지만 일을 위해서 코딩을 하는 것은 고통에 가깝습니다. 그것은 저도 마찬가지 입니다. 그리고 그런 반복적인 코드가 제작중 혹은 개선중인 제품에 입력되는것도 싫어 합니다. 이를 간단하게 줄여 DRY(Do not Repeat Yourself)라고 합니다. 

 이런  DRY원칙은 데이터베이스를 구성함에도 마찬가지 입니다. 필연적으로 DB(앞으로 데이터 베이스를 이렇게 줄여서 말하겠습니다.)는 쓰기와 읽기를 반복해야 합니다. 그 반복하는 횟수 만큼 코드가 길어질 수 밖에 없습니다. 이런 반복을 피하기 위해 뛰어난 개발자 분들께서 만들어 놓은 도구가 “SQLAlchemy” 입니다. 

 

www.sqlalchemy.org/

 

SQLAlchemy - The Database Toolkit for Python

The Python SQL Toolkit and Object Relational Mapper SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL. It provides a full suite of well known enterprise-level persisten

www.sqlalchemy.org

 

 

 프로그램 개발을 조금이라도 공부한 분이라면 class를 접해 보셨을 겁니다. (혹시 모르는 분이시라면 생활코딩 혹은 유튜브에 많은 설명이 공개되어 있으니 참고하시기 바랍니다. ) 이 라이브러리는 class의 개념을 도입하여 DB의 CRUD(Create , Read, Update, Delete)를 이해하기 쉽게 해줍니다. 

제가 블로그를 만들면서 사용한 코드는 다음과 같습니다. 

 

새로운 데이터베이스 만들기

from
flask_sqlalchemy
import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///posts.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
새로운 데이터베이스 테이블 만들기

class BlogPost(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(250), unique=True, nullable=False)
subtitle = db.Column(db.String(250), nullable=False)
date = db.Column(db.String(250), nullable=False)
body = db.Column(db.Text, nullable=False)
author = db.Column(db.String(250), nullable=False)
img_url = db.Column(db.String(250), nullable=False)

 

root 라우트에서 모든 블로그 포트스 읽어서 index.html로 보내주기

@app.route('/')
def get_all_posts():
posts = BlogPost.query.all()
return render_template("index.html", all_posts=posts)

 

edit-post 라우트 에서 기존의 입력을 가져와서 수정한 뒤 업데이트 하기


@app.route("/edit-post/<int:post_id>", methods=["GET", "POST"])
def edit_post(post_id):
post = BlogPost.query.get(post_id)
edit_form = CreatePostForm(
title=post.title,
subtitle=post.subtitle,
img_url=post.img_url,
author=post.author,
body=post.body
)
if edit_form.validate_on_submit():
post.title = edit_form.title.data
post.subtitle = edit_form.subtitle.data
post.img_url = edit_form.img_url.data
post.author = edit_form.author.data
post.body = edit_form.body.data
db.session.commit()
return redirect(url_for("show_post", post_id=post.id))
return render_template("make-post.html", form=edit_form, is_edit=True)

 

 

delete 라우트에서 특정 포스트의 아이디를 기준으로 삭제하기 

@app.route
("/delete/<int:post_id>")
def delete_post(post_id):
post_to_delete = BlogPost.query.get(post_id)
db.session.delete(post_to_delete)
db.session.commit()
return redirect(url_for('get_all_posts'))

 

 위와 같이 간단하게 블로그의 포스트를 작성 ,읽기, 수정, 삭제하는 라우터를 만들어 보았습니다. 다음 글에서는  HTML에 다양한  form 을 기본적으로  제공해주는 wtforms를 알아 보겠습니다. 

 

 

2021/02/16 - [Toy Project/Python] - Blog project - Databas

 

Blog project - Database

Blog project  Database  블로그의 기본적인 페이지를 만들었습니다.  백엔드를 맡고 있는  flask 와   프론트엔드를 맡고 있는  HTML 그리로 이 두 프레임워크를 연결하기 위해  jinja  라는 파..

jisungsdevstroy.tistory.com

2021/02/04 - [Toy Project/Python] - Blog project - Bootstrap

 

Blog project - Bootstrap

Blog project Bootstrap  안녕하세요 지성입니다. 저는 지금 블로그를 만들어 가고 있습니다. 지난 글에서 서버 단에서 작동하는 코드는 최대한 간단하게 구성했고 웹에서 작동하는 프런트엔드 코드

jisungsdevstroy.tistory.com

2021/02/03 - [Toy Project/Python] - Blog project - Front-end

 

Blog project - Front-end

Blog Project Front-end 지난 번에는 백엔드 즉 눈에는 보이지 않는 서버 쪽의 코드를 살펴 보았습니다. 최대한 간단하게 구성하기 위해 “데이터베이스”나 “배포”를 위한 내용은 포

jisungsdevstroy.tistory.com

2021/02/02 - [Toy Project/Python] - Blog project - Back_end

 

Blog project - Back_end

Blog project Back-end  “Web Application”을 만드는 일은 다양한 기술의 조합으로 이루어집니다.  처음 이 일을 시작했던 때를 떠올려 보면 이 많은 것을 언제다 공부하나 하는 막막..

jisungsdevstroy.tistory.com

2021/02/01 - [Toy Project/Python] - Blog Project - Start

 

Blog Project - Start

Blog Project Start  안녕하세요 ? 저는 지성이라고 합니다. 한국에 살고 있는 평범한 직장인중 한명입니다. 저는 취미로 컴퓨터를 공부하고 있습니다.  “컴퓨터” 에도 다양한 분야가 있지만 저는

jisungsdevstroy.tistory.com

 

'Project > Python' 카테고리의 다른 글

Blog project - Login  (0) 2021.03.31
Blogproject - Flask-wtf  (0) 2021.03.18
Blog project - Database  (0) 2021.02.16
Blog project - GET/POST  (0) 2021.02.05
Blog project - Bootstrap  (0) 2021.02.04