8월 달엔 한 번 해보고 싶은 원데이클래스 - 직접 개발 스티커 만들어보기! 모임을 해보려고 합니다.., 그런데 신청폼을 직접 flask로 만들어서 받아보려고 합니다.
구글 신청폼이나 노션 등등 많이 있지만, 직접 만들어서 쓰는 걸로... 이유는? 직접 만드는 게 더 기억에 남을 것 같습니다.
예상 기획 Draft는 다음과 같습니다. ㄱㅣ획은 그림그리듯 손으로...
home 이나 index.html 에는 3가지 html을 연결할 겁니다.
1 Register 폼이 있는 등록 페이지,
2 신청 인원을 볼 수 있는 명단 페이지,
3 온라인 갤러리 페이지.
하지만 갤러리까지 만드는 건 시간 없을 것 같아서 갤러리는 노션 링크를 붙여넣기로 했습니다.
여기에 추가로 전반적으로 관리가 되는 관리자 페이지는 보이지 않게 처리하려고 만드는 중입니다. 개별 사용자가 자신의 데이터를 수정하고 삭제하는 것 뿐만 아니라, 관리자가 따로 CRUD 가 다 되도록 처리할 예정입니다. 아직 만드는 중인데 후다닥 만들어야 8월에는 모임 개설을 할 수 있을 것 같네요
그래서 sqlite3 로 table을 만들었습니다.
Sqlite3 -flask 만들기
1. 우선 TABLE 구조를 짭니다
스키마.sql은 대략 다음과 같이 id 로 서로 테이블을 연결해 주도록 primary key를 지정하였고, 성함, 닉네임, 이메일, 해당 정보를 수정할 수 있도록 비밀번호 지정까지 정해줍니다.
# schema.sql
CREATE TABLE Student (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
nickname TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
CREATE TABLE Timeslot (
id INTEGER PRIMARY KEY AUTOINCREMENT,
date DATE NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL,
student_id INTEGER,
FOREIGN KEY(student_id) REFERENCES Student(id)
);
이 테이블은 등록 인원, 해당 인원이 가능한 날짜, 해당 날짜에서 가능한 시작 시간, 가능한 마지막 시간 을 지정하고 테이블로 저장하는 형태입니다.
2. DB 이름 및 테스트 데이터 집어넣기
에디터를 키고 다음과 같이 sqlite3 과 관련해서 코드를 짭니다. database.db 라는 이름에 해당 스키마로 테이블을 만들고 이름, 별명, 메일주소, 비밀번호 예시 데이터를 집어넣었습니다.
vim initial_db.py
# initial_db.py
import sqlite3
connection = sqlite3.connect('database.db')
with open('schema.sql') as f:
connection.executescript(f.read())
cur = connection.cursor()
# Insert student records
cur.execute("INSERT INTO Student (name, nickname, email, password) VALUES (?, ?, ?, ?)",
('문제가있으면연락주세요', 'if U have Any Problem...', 'testingDD@email.com', 'password1'))
# Get the IDs of the students we just inserted
student1_id = cur.execute("SELECT id FROM Student WHERE email = ?", ('testingDD@email.com',)).fetchone()[0]
# Insert timeslot records
cur.execute("INSERT INTO Timeslot (date, start_time, end_time, student_id) VALUES (?, ?, ?, ?)",
('2023-08-12', '10:00', '12:00', student1_id))
cur.execute("INSERT INTO Timeslot (date, start_time, end_time, student_id) VALUES (?, ?, ?, ?)",
('2023-08-13', '11:00', '13:00', student1_id))
# Commit changes
connection.commit()
connection.close()
DB이름과 test할 수 있도록 데이터를 집어넣고 실행시킬 겁니다.
python initial_db.py
으로 만들면 database.db가 생성됩니다.
이제 가지고 와서 읽고, 쓰고, 수정하고, 삭제하면 됩니다.
3. DB 연결 - CRUD 예시
해당 데이터를 어떻게 create, read, update, delete 할 수 있는지에 대한 예시입니다. 해당 코드는 적절하게 섞어서 사용할 예정입니다.
def connect_db():
return sqlite3.connect('database.db')
# Create database connection
connection = connect_db()
cur = connection.cursor()
# Insert 예시
cur.execute("INSERT INTO Student (name, nickname, email, password) VALUES (?, ?, ?, ?)",
(name, nickname, email, password))
# Insert timeslots
for date, start_time, end_time in zip(date_list, starttime_list, endtime_list):
cur.execute("INSERT INTO Timeslot (date, start_time, end_time, student_id) VALUES (?, ?, ?, ?)",
(date, start_time, end_time, student_id))
# SELECT 예시
cur.execute("SELECT * FROM Student WHERE id=?", (id,))
cur.execute("SELECT * FROM Student")
# 가지고 오기
users = cur.fetchall()
# Update user information 예시
cur.execute("""
UPDATE Student SET name=?, nickname=?, email=? WHERE id=?
""", (name, nickname, email, id))
# DELETE 예시
cur.execute("DELETE FROM Timeslot WHERE student_id=?", (id,))
cur.execute("DELETE FROM Student WHERE id=?", (id,))
# Commit changes and close connection 하기
connection.commit()
connection.close()
이런 식으로 만드는 중입니다. 같이 원데이 클래스 - 스티커 만드실 분 모집하려고 합니다. 8월 초까진 후다닥 만드는 걸로!
'Python' 카테고리의 다른 글
flask font error (0) | 2024.04.17 |
---|---|
Bard API key 오류 / error (1) | 2023.10.04 |
pycharm-copilot 베타버전 설치 방법 (0) | 2023.05.12 |
[리버스]Pyinstaller exe에서 py로 변환(23.04.04) (0) | 2023.04.17 |
chromedriver, Crontab, 저장된 파일 위치, 권한 issue (0) | 2023.03.21 |