1. sqlite3이란?
다른 DBMS와 달리 서버를 구동하지 않고 응용 프로그램 내부에서 사용할 수 있는 DBMS이다.
파이썬에서 sqlite3 모듈을 불러와서 사용할 수 있다.
sqlite3 모듈을 이용해서 데이터베이스를 생성해보자!
# 모듈을 불러온다.
import sqlite3
print(sqlite3.version) # 모듈의 버전 2.6.0
print(sqlite3.sqlite_version) # sqlite의 버전
DB, 테이블 생성
# DB를 생성한다.
con = sqlite3.connect('simpledb.sqlite')
print(type(con))
# 데이터 삽입
# connection 객체인 con을 이용해서 cursor 객체를 생성함
cursor = con.cursor()
테이블 구조
이름 : alarm
저장할 내용 : 요일 오전 오후 시간 분 과목이름 줌번호 패스워드 사운드여부
칼럼 이름 | 요일 day |
시간(시/분) hourmin |
과목 이름 subject |
줌번호 zoomid |
패스워드 zoompw |
사운드 여부 sound |
데이터 타입 | VARCHAR2(200 BYTE) | VARCHAR2(200 BYTE) | VARCHAR2(200 BYTE) | NUMBER(10,2) | NUMBER(10,2) | NUMBER(10,2) |
# 모듈을 불러온다.
import sqlite3
print(sqlite3.version) # 모듈의 버전 2.6.0
print(sqlite3.sqlite_version) # sqlite의 버전
# DB를 생성한다.
con = sqlite3.connect('simpledb.sqlite')
print(type(con))
# 데이터 삽입
# connection 객체인 con을 이용해서 cursor 객체를 생성함
cursor = con.cursor()
try:
# 새로 테이블을 만들어야 하는 경우
cursor.execute("CREATE table alarm(DAY VARCHAR2(200 BYTE), HOURMIN VARCHAR2(200 BYTE), SUBJECT VARCHAR2(200 BYTE), ZOOMID NUMBER(10,2), ZOOMPW NUMBER(10,2), SOUND NUMBER(10,2))")
except:
# 그러지 않아도 되는 경우
pass
cursor.execute("INSERT INTO alarm VALUES ('SUN', '12:25','교육학개론', 19230435, 0920, 0)")
cursor.fetchall()
con.commit()
for row in cursor.execute('SELECT * FROM alarm ORDER BY SOUND'):
print(row)
con.commit()
con.close()
output
2.6.0
3.35.5
<class 'sqlite3.Connection'>
('SUN', '12:25', '교육학개론', 19230435, 920, 0)
2. pyqt와 sqlite3 연결하기
요구사항
가. pyqt에서 ok 버튼을 누르면, 해당 정보를 sqlite3에 저장한다.
나. sqlite3에서 테이블 정보를 불러와서, 표로 나타낸다.
=> 알고리즘
- sqlite3에 연결 > 조회(select)
- 표로 나타내기
가. pyqt에서 ok 버튼을 누르면, 해당 정보를 sqlite3에 저장한다. 를 수행한 과정
=> pyqt 모듈을 사용한다고 해서 크게 다를 것은 없다.
=> 알고리즘
- 작성 페이지가 나온다 (이때 설정값 모두 init 해주기)
- 작성 버튼/토굴/텍스트 등을 작성한다.
- ok 버튼을 누르면, 모든 input 요소를 저장해서
(이때 input 요소는 요일, 시간대, 시, 분, 과목 이름, 줌 id, 줌 비번, 소리 여부)
요일 -> self.clicked_days에 접근
시간대 -> self.clicked_times에 접근
시 -> QComboBox의 .currentText() 매소드를 이용해서 받아올 것
분 -> QComboBox의 .currentText() 매소드를 이용해서 받아올 것
과목 이름 -> self.subjectName_input / QLineEdit()의 .text() 매소드를 이용해서 받아온다.
줌 id -> self.zoomID_input / QLineEdit()의 .text() 매소드를 이용해서 받아온다.
줌 비번 -> self.zoomPW_input / QLineEdit()의 .text() 매소드를 이용해서 받아온다.
소리 여부 -> self.clicked_sounds에 접근
: 에러가 있는 경우, 에러 메시지를 보내고,
: 에러가 없는 경우, (확인 메시지를 출력한 뒤에) sqlite3에 저장한다.
소스 코드
def OK_clicked(self):
# 데이터를 수집합니다.
day_data = self.clicked_days[0].text() # 요일
time_data = self.clicked_times[0].text() # 오전 오후
hour_data = int(self.hour.currentText())
min_data = int(self.min.currentText())
if time_data == 'AM':
total_time_data = str(f'{hour_data}:{min_data}')
else:
total_time_data = str(f'{hour_data+12}:{min_data}')
sound_data = self.clicked_sounds[0].text() # 소리 유무
if sound_data == 'On':
sound_data = 1 # on은 1
else:
sound_data = 0 # off는 0
subject_data = self.subjectName_input.text()
id_data = int(self.zoomID_input.text())
pw_data = int(self.zoomPW_input.text())
print(day_data, total_time_data, subject_data, id_data, pw_data, sound_data)
cursor.execute("INSERT INTO alarm VALUES (?, ?, ?, ?, ?, ?)", (day_data, total_time_data, subject_data, id_data, pw_data, sound_data) )
cursor.fetchall()
con.commit()
나. sqlite3에서 테이블 정보를 불러와서, 표로 나타낸다. 를 수행한 과정
=> 알고리즘
- sqlite3에 연결 > 조회(select)
- 표로 나타내기
원래 만들어둔 함수는 다음과 같았다.
def setTableWidgetData(self):
self.dbTable.setItem(0,0,QTableWidgetItem("(0,0)"))
self.dbTable.setItem(0,1,QTableWidgetItem("(0,0)"))
self.dbTable.setItem(1,0,QTableWidgetItem("(0,0)"))
self.dbTable.setItem(1,1,QTableWidgetItem("(0,0)"))
이 테이블에 sqlite db 내용을 반영하도록 하면,
선택사항 결정 후 OK 버튼을 누르면,
다음과 같은 화면이 뜬다.
참고 자료
https://www.jbmpa.com/pyside2/7
https://www.tutorialspoint.com/pyqt/pyqt_database_handling.htm
https://docs.python.org/ko/3/library/sqlite3.html
https://ichi.pro/ko/pyqt-mich-gwangyehyeong-deiteobeiseu-deiteo-hyeongsig-2-2337351792504
Handling SQL Databases With PyQt: The Basics – Real Python
'Computer Science > Database' 카테고리의 다른 글
# 4 | PyQt에 알람 기능 추가하고 줌에 접속하도록 하기 (0) | 2022.01.27 |
---|---|
SQL | # 4 함수 : 함수로 데이터를 쉽게 가공하기 (0) | 2022.01.27 |
SQL | #3 SELECT 문법, WHERE 절 (0) | 2022.01.26 |
SQL | # 2 오라클 설치 과정 (0) | 2022.01.26 |
SQL | # 1 관계형 데이터베이스와 오라클 (0) | 2022.01.26 |