3/31
파이썬을 이용한 sqlite3 활용
cmd로 DB 생성 및 정리 (파이썬으로 sqlite3 핸들링. DB(생성한 파일)를 읽고 쓰기)
.open db.sqlite3 (db라는 파일이 없다면 생성됨.)
id integer primary key,
title text not null,
body text
);
ls -l (파일들 상세보기)
python3 sqlite3 ★검색창에 검색. (인터페이스 검색)
read.py
import sqlite3 conn = sqlite3.connect('db.sqlite3') curor = conn.cursor() curor.execute('SELECT * FROM topics') topics = curor.fetchall() for topic in topics: print(topic[0], topic[1]) conn.close()
$ python3 read.py
$ sqlite3 db.sqlite3
create.py
import sqlite3 conn = sqlite3.connect('db.sqlite3') curor = conn.cursor() title = input('title? ') body = input('body? ') curor.execute('INSERT INTO topics (title, body) VALUES(?, ?)', (title, body)) conn.commit() conn.close() import read
$ python3 create.py
title? 입력
body? 입력
$ python3 read.py
topics 들을 DB로 바꾸기 (영구보관 가능)
전 > 후
전 > 후
삭제버튼 (전 > 후)
------------------------ 결과들
홈화면
creat버튼 눌렀을 때
sqlite를 눌렀을 때
--- 최종 코드
from flask import Flask, request, redirect
import sqlite3
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 ...."}
]
def template(content, id=None):
contextUI = ''
if id != None:
contextUI = '<input type="submit" value="delete" class="btn btn-dark">'
conn = sqlite3.connect('db.sqlite3')
cs = conn.cursor()
cs.execute('select * from topics')
topics = cs.fetchall()
conn.close()
liTags = ''
for topic in topics:
liTags = liTags + f'<li><a href="/read/{topic[0]}/">{topic[1]}</a></li>'
return f'''
<html>
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<style>
h1{{
border-bottom:10px solid green;
}}
h1>a{{
text-decoration:none;
}}
</style>
</head>
<body class="container">
<input type="button" value="night" onclick="
document.querySelector('body').style.backgroundColor = 'black';
document.querySelector('body').style.color = 'white';
">
<h1><a href="/">WEB</a></h1>
<ol>
{liTags}
</ol>
{content}
<form action="/delete/{id}/" method="POST">
<div class="btn-group" role="group" aria-label="Basic example">
<a href="/create/" class="btn btn-dark">create</a>
{contextUI}
</div>
</form>
</body>
</html>
'''
@app.route("/")
def index():
return template('<h2>Welcome</h2>Hello, WEB!')
@app.route("/read/<int:id>/")
def read(id):
conn = sqlite3.connect('db.sqlite3')
cs = conn.cursor()
cs.execute('SELECT * FROM topics WHERE id=?', (id,))
topic = cs.fetchone()
conn.close()
title = topic[1]
body = topic[2]
return template(f'<h2>{title}</h2>{body}', id)
@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():
title = request.form['title']
body = request.form['body']
conn = sqlite3.connect('db.sqlite3')
cs = conn.cursor()
cs.execute('INSERT INTO topics (title, body) VALUES(?,?)',(title,body))
id = cs.lastrowid
conn.commit()
conn.close()
return redirect(f'/read/{id}/')
@app.route('/delete/<int:id>/', methods=['POST'])
def delete(id):
conn = sqlite3.connect('db.sqlite3')
cs = conn.cursor()
cs.execute('DELETE FROM topics WHERE id = ?',(id,))
conn.commit()
conn.close()
return redirect('/')
# # @app.route('/update/')
# # def update():
# # return 'Update'
app.run()
↑ CSS, 자바스크립트 복습 내용도 포함
f-string escape string (중괄호를 나오게 하려면 중괄호 두번씩 {{ }} )
전체적으로 어려웠지만 강사님께서 지난번 학습 내용들을 한번씩 다시 설명해주시고, 이전에 배웠던 CSS와 자바스크립트의 내용도 flask에 적용시키며 복습하는 시간을 가질 수 있었다.
헷갈리고 어려웠던 파이썬부터 전체적으로 다시 강의를 보며 복습하고 따라해보기.
오늘로서, 이고잉 강사님의 수업이 모두 끝이 났다.
강사님과 수강생들 모두에게 주어진 시간이 부족했던 것은 사실이지만, 완전 초급 입문자가 대략적으로나마 코딩에 대해 알 수 있게 되었던 시간이었던 것 같다.
(으...갑자기 월말평가 무조건 만점만 pass라니...ㄷㄷ 너무 무섭)