반응형
Mysql 의 my_db 와 연동하여 다음 내용을 실행하는 python 프로그램
- 사원번호가 7521인 사원의 이름을 출력한다
- 이름이 SCOTT 인 사원의 부서이름을 출력한다
- 담당업무가 SALESMAN 인 모든사원의 이름을 출력한다.
- 모든 부서의 이름을 출력한다.
#mysql - python connection test
import pymysql #mysql과 연동하기 위해
#필요한 기본 DB 정보
host = "localhost"
user = "root"
pw = "password"
db = "my_db"
#DB에 접속
conn = pymysql.connect(host= host, user = user, password = pw, db = db)
#사용할 sql문
sql1 = "SELECT ename FROM emp WHERE empno=7521"
sql2 = "SELECT dname FROM emp, dept WHERE dept.deptno=emp.deptno and ename='scott'"
sql3 = "SELECT ename FROM emp WHERE job='salesman'"
sql4 = "SELECT dname FROM dept"
querys = [sql1, sql2, sql3, sql4]
for sql in querys:
print(sql)
# sql문 실행/데이터 받기
curs = conn.cursor() #sql 실행시 결과를 담고 있는 버퍼를 정렬
curs.execute(sql) #앞의 sql문 실행
row = curs.fetchone() #sql실행결과 모두 가져오기, fetchall 모든 행 가져옴, fetchone은 하나의 행만 가져옴
while(row):
print(row)
row = curs.fetchone()
print("==========================================================")
#db 접속 종료
curs.close()
conn.close()
Mysql 의 world 데이터베이스와 연동하여 다음과 같이 국가명을 입력하면 해당 국가의 정보를 출력하는 윈도우 프로그램
- 매치되는 국가가 없으면 모든 항목에 공백 출력
import sys
import pymysql
from PyQt5.QtWidgets import *
def connectDB():
#필요한 db 정보
host = "localhost"
user = "root"
pw = "Changmin97"
db = "world"
#db 접속
conn = pymysql.connect(host=host, user =user, password =pw, db =db)
return(conn) #connection 리턴
def disconnectDB(conn):
conn.close()
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
# UI 디자인 함수
def initUI(self):
#QLable 문자열 출력
label1 = QLabel('Country name')
label2 = QLabel('Continent')
label3 = QLabel('Population')
label4 = QLabel('GNP')
label5 = QLabel('Captial city')
label6 = QLabel('Language')
#text_Country_name
self.text_Country_name = QTextEdit()
self.text_Country_name.setFixedWidth(200)
self.text_Country_name.setFixedHeight(30)
#버튼 생성, 버튼 클릭시 btn_1_clicked 실행
btn_1 = QPushButton('Query')
btn_1.clicked.connect(self.btn_1_clicked)
#text_Continent
self.text_Continent = QTextEdit()
self.text_Continent.setFixedWidth(200)
self.text_Continent.setFixedHeight(30)
#text_Population
self.text_Population = QTextEdit()
self.text_Population.setFixedWidth(200)
self.text_Population.setFixedHeight(30)
#text_GNP
self.text_GNP = QTextEdit()
self.text_GNP.setFixedWidth(200)
self.text_GNP.setFixedHeight(30)
#text_Captial_city
self.text_Captial_city = QTextEdit()
self.text_Captial_city.setFixedWidth(200)
self.text_Captial_city.setFixedHeight(30)
#text_Language
self.text_Language = QTextEdit()
self.text_Language.setFixedWidth(200)
self.text_Language.setFixedHeight(30)
#화면 배치, grid를 만들어 배치
gbox = QGridLayout()
gbox.addWidget(label1,0,0)
gbox.addWidget(self.text_Country_name, 0, 1)
gbox.addWidget(btn_1, 0, 2)
gbox.addWidget(label2,1,0)
gbox.addWidget(self.text_Continent, 1, 1)
gbox.addWidget(label3,2,0)
gbox.addWidget(self.text_Population, 2, 1)
gbox.addWidget(label4,3,0)
gbox.addWidget(self.text_GNP, 3, 1)
gbox.addWidget(label5,4,0)
gbox.addWidget(self.text_Captial_city, 4, 1)
gbox.addWidget(label6,5,0)
gbox.addWidget(self.text_Language, 5, 1)
self.setLayout(gbox)
self.setWindowTitle('Country Info')
self.setGeometry(300, 300, 480,250) #창뜨는 위치, 크기
self.show()
#버튼 클릭 처리
def btn_1_clicked(self):
#사용자가 입력한 값 받아서 empno 저장
Country_name = self.text_Country_name.toPlainText()
sql = "SELECT country.name, continent, country.population, gnp, city.name, language \
From country, city, countrylanguage\
where country.code = city.countrycode \
and country.code = countrylanguage.countrycode\
and country.capital=city.id\
and IsOfficial = 'T' \
and country.name ="+"'"+Country_name+"'"
#ex) ename '"+ename+"'" =>문자일 경우 따옴표 주의!
conn = connectDB()
curs = conn.cursor()
curs.execute(sql)
result = curs.fetchone() # sql 실행 결과 가져오기
if result:
self.text_Country_name.setText(result[0])
self.text_Continent.setText(result[1])
self.text_Population.setText(str(result[2]))
self.text_GNP.setText(str(result[3]))
self.text_Captial_city.setText(result[4])
self.text_Language.setText(result[5])
else:
self.text_Country_name.setText("") #매치되는 국가가 없으면 모든 항목에 공백 출력
curs.close()
disconnect(conn)
#END Class
#프로그램 실행, class를 생성하고 실행
if(__name__ == '__main__'):
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
728x90
반응형
'공부 > 데이터베이스' 카테고리의 다른 글
회복과 병행제어 - 회복 (0) | 2021.06.03 |
---|---|
관계 대수 (0) | 2021.06.03 |
index (0) | 2021.06.02 |
데이터 베이스 보안 (0) | 2021.06.02 |
DB 파이썬 연동 (0) | 2021.05.18 |