Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- Serialization
- 메모리구조
- coding test
- datastructure
- 윤성우의 열혈 자료구조
- 알기쉬운 알고리즘
- C programming
- s
- Graph
- 윤성우 열혈자료구조
- 이것이 자바다
- 이스케이프 문자
- buffer
- Algorithm
- 혼자 공부하는 C언어
- list 컬렉션
- Stack
- C 언어 코딩 도장
- R
- insertion sort
- Selection Sorting
- JSON
- stream
Archives
- Today
- Total
Engineering Note
RDB와 Flask 본문
파이썬은 오픈소스와 상용 데이터베이스에 대한 대부분의 데이터베이스 엔진을 위한 패키지를 가지고 있습니다.
Flask에서 입력받은 내용을 DB에 저장할 수 있습니다.
효율적인 데이터 관리 가능
사용자 정보 검색
이번에서 실습한 내용을 이번 장에서는 DB를 연동하는 실습을 해보겠습니다.
- 실습에 사용할 DB는 sqlite입니다. 실습을 시작하기에 앞서 import를 해줍니다.
import sqlite3
* DB를 사용하기 위해서는 connect()를 한 상태에서 사용하고 사용이 끝나면 close()로 연결을 끊어줘야 합니다
```python
con = sqlite3.connect('database.db')
con.execute('쿼리문')
con.commit()
con.close()
- DB와 연결할 때 사용하는 객체를 생성하고 close()를 사용하는 게 번거롭다면 다음과 같은 방법으로도 사용 가능합니다.
with sqlite3.connect("database.db") as con: con.execute("쿼리문") con.commit()
* 실습 코드
```python
conn = sqlite3.connect('database.db')
print ("Opened database successfully")
conn.execute('CREATE TABLE IF NOT EXISTS Board (name TEXT, context TEXT)')
print ("Table created successfully")
value = [['Elice', 15], ['Dodo', 16], ['Checher', 17], ['Queen', 18]]
for i in range(4):
conn.execute(f"INSERT INTO Board(name, context) VALUES('{value[i][0]}', '{value[i][1]}')")
conn.commit()
conn.close()
실습 전체 코드 설명
- 서버 실행시 DB 가 연결된다. 그리고 value에 저장된 데이터를 INSERT INTO 문을 통해 데이터 베이스에 저장한다.
- ROOT URL에서 저장된 데이터를 보여주는 화면이 출력된다.
- 검색 화면에서는 POST 방식으로 데이터를 전송해주면 서버에서는 아래와 같은 방식으로 데이터 베이스를 연겨하고 객체를 만들고 데이터를 조회한다. 그리고 rows 변수에 담아 search.html로 다시 return을 해준다.
@app.route('/search', methods = ['GET', 'POST'])
def search():
if request.method == 'POST':
print("hello")
result = request.form['search']
# 데이터베이스를 연결하세요.
con = sqlite3.connect("database.db")
# cursor 객체를 만드세요.
cur = con.cursor()
# Board 테이블에서 요청받은 result가 있는지 찾는 쿼리를 실행하세요.
cur.execute(f"SELECT * FROM Board WHERE name='{result}' or context='{result}'")
# 쿼리 실행 결과를 rows 변수에 저장하세요.
rows = cur.fetchall()
# DB의 연결을 해제하세요.
con.close()
print("DB:")
for i in range(len(rows)):
print(rows[i][0] + ':' + rows[i][1])
return render_template('search.html', rows = rows)
else:
return render_template('search.html')
실습 전체 코드
from flask import Flask, render_template, request, url_for, redirect
import sqlite3
app = Flask(__name__)
conn = sqlite3.connect('database.db')
print ("Opened database successfully")
conn.execute('CREATE TABLE IF NOT EXISTS Board (name TEXT, context TEXT)')
print ("Table created successfully")
name = [['Elice', 15], ['Dodo', 16], ['Checher', 17], ['Queen', 18]]
for i in range(4):
conn.execute(f"INSERT INTO Board(name, context) VALUES('{name[i][0]}', '{name[i][1]}')")
conn.commit()
conn.close()
@app.route('/')
def board():
con = sqlite3.connect("database.db")
cur = con.cursor()
cur.execute("select * from Board")
rows = cur.fetchall()
print("DB:")
for i in range(len(rows)):
print(rows[i][0] + ':' + rows[i][1])
return render_template('board.html', rows = rows)
@app.route('/search', methods = ['GET', 'POST'])
def search():
if request.method == 'POST':
search = request.form['search']
con = sqlite3.connect("database.db")
cur = con.cursor()
cur.execute(f"SELECT * FROM Board WHERE name='{search}' or context='{search}'")
rows = cur.fetchall()
print("DB:")
for i in range(len(rows)):
print(rows[i][0] + ':' + rows[i][1])
return render_template('search.html', rows = rows)
else:
return render_template('search.html', msg = "검색어를 입력해주세요.")
@app.route('/add', methods = ['GET', 'POST'])
def add():
if request.method == 'POST':
name = request.form['name']
context = request.form['context']
with sqlite3.connect("database.db") as con:
cur = con.cursor()
# name이 DB에 있는지 확인 후 사용자를 DB에 추가하세요.
# dbname = cur.execute(f"SELECT name from Board WHERE name='{name}'")
cur.execute(f"SELECT count('name') FROM Board WHERE name='{name}'")
if cur.fetchall()[0][0] == 0:
cur.execute(f"INSERT INTO Board (name, context) VALUES ('{name}', '{context}')")
con.commit()
else:
# 중복 사용자인 경우 안내 메시지를 넘긴 후 add.html을 렌더링하세요.
return render_template('add.html', msg = "중복 사용자입니다. 이름을 바꿔주세요.")
return redirect(url_for('board'))
else:
return render_template('add.html')
if __name__ == '__main__':
app.run(debug=True)
'Server > Flask' 카테고리의 다른 글
SQL Alchemy와 ORM (0) | 2021.07.18 |
---|---|
JWT (0) | 2021.07.18 |
Flask 게시글 삭제 (0) | 2021.07.18 |
Web-Backend 2 (0) | 2021.07.18 |
Web-Backend (0) | 2021.07.15 |
Comments