반응형
1) 사용 파일
2) 학점을 DBMS에 입력하고 원하는 정보를 쿼리해서 출력
makecsv.py : 테스트 데이터 생성
# 1) 학점 정보 : ID, KOR, MATH, GRADE
# - ID: 숫자 (임의, 중복X)
# - KOR : 국어 점수
# - MATH : 수학점수
# - GRAE : A~F
# 2) 파이썬 프로그램을 이용해서 위 조건에 맞는 임의의 데이터 100건을 만든다.
# 이때 해당 결과를 grade.csv로 저장한다.
# ID, KOR, MATH, GRADE
# 1, 100, 100, A
# ..
# 100건.
import csv
data = []
for i in range(100):
student_id = i + 1
kor_score = 70 + (i % 31)
math_score = 80 + (i % 21)
average = (kor_score + math_score) / 2
if average >= 90:
grade = 'A'
elif average >= 80:
grade = 'B'
elif average >= 70:
grade = 'C'
elif average >= 60:
grade = 'D'
else:
grade = 'F'
data.append((student_id, kor_score, math_score, grade))
with open('./data/grade.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['ID', 'KOR', 'MATH', 'GRADE'])
writer.writerows(data)
print('Done')
insertcsv.py : DB에 insert
# 3) 이렇게 만든 CSV를 DB에 입력한다.
# - DBMS는 sqlite를 쓴다. (파일기반 DB)
# - 테이블 구조는 임의로 한다. (정규화 고려하지 않아도 된다.)
import csv
import sqlite3
conn = sqlite3.connect('./data/grade.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS students
(ID TEXT PRIMARY KEY NOT NULL,
KOR INT NOT NULL,
MATH INT NOT NULL,
GRADE TEXT NOT NULL)''')
with open('./data/grade.csv', 'r') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
c.execute("INSERT INTO students (ID, KOR, MATH, GRADE) VALUES (?, ?, ?, ?)",
(row['ID'], row['KOR'], row['MATH'], row['GRADE']))
conn.commit()
conn.close()
displaygrade.py : 조건에 따라 출력
# 4) DB에 저장된 데이터에서 A 학점인 것만 찾어서 출력한다.
# - select ~ where
import sqlite3
def display_table():
conn = sqlite3.connect('./data/grade.db')
c = conn.cursor()
c.execute("SELECT * FROM students WHERE GRADE = 'A'")
rows = c.fetchall()
conn.close()
for row in rows:
print(f'ID: {row[0]}, KOR: {row[1]}, MATH: {row[2]}, GRADE: {row[3]}')
if __name__ == '__main__':
display_table()
3) 웹에 출력하자
webgrade.py : 웹으로 표시
# import flask - pip install flask
# 필요한 라이브러리 가져오기
import sqlite3
from flask import Flask, render_template
# Flask 앱 초기화
app = Flask(__name__)
# 루트 경로("/") 정의
@app.route('/')
def display_table():
# 데이터베이스 연결 및 데이터 조회
conn = sqlite3.connect('./data/grade.db')
c = conn.cursor()
c.execute("SELECT * FROM students WHERE GRADE = 'A'")
rows = c.fetchall()
conn.close()
print(rows)
# 데이터를 웹 페이지로 전달
return render_template('table.html', rows=rows)
# 애플리케이션 실행
if __name__ == '__main__':
app.run()
templates/table.html
<!DOCTYPE html>
<html>
<head>
<title>A 학점 학생 목록</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid black;
padding: 8px;
}
th {
background-color: lightgray;
}
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>KOR</th>
<th>MATH</th>
<th>GRADE</th>
</tr>
</thead>
<tbody>
{% for row in rows %}
<tr>
<td>{{ row[0] }}</td>
<td>{{ row[1] }}</td>
<td>{{ row[2] }}</td>
<td>{{ row[3] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
1) vscode 가 제공해주는 live server로 화면 표현
2) flask 구동 후 화면 표현
반응형
'docker' 카테고리의 다른 글
[kosa20241120] docker를 이용해 서버 구동하기 실습 (node.js, mariaDB) (0) | 2024.11.20 |
---|---|
[kosa20241120] docker를 활용한 tomcat 실행 실습 (0) | 2024.11.20 |