반응형

mysql연동위해 pymysql 설치

 

conda install pymysql

 

 

#mysql - python connection test

import pymysql #mysql과 연동하기 위해

#필요한 기본 DB 정보
host = "localhost"
user = "root"
pw = "XXXX"
db = "my_db"

#DB에 접속
conn = pymysql.connect(host= host, user = user, password = pw, db = db)

#사용할 sql문
sql = "SELECT * FROM emp LIMIT 10"

# sql문 실행/데이터 받기
curs = conn.cursor() #sql 실행시 결과를 담고 있는 버퍼를 정렬
curs.execute(sql)	#앞의 sql문 실행

data = curs.fetchall() #sql실행결과 모두 가져오기, fetchall 모든 행 가져옴, fetchone은 하나의 행만 가져옴
type(data)				#data 자료구조
data					#data 내용출력
data[0]					#첫번째 행
str(data[0][0])			#첫번째 행의 첫번째 컬럼

#db 접속 종료
curs.close()
conn.close()

sql = "SELECT * FROM emp LIMIT 10"

curs = conn.cursor()
curs.execute(sql)

row = curs.fetchone()
while(row):
	print(row)
    row = curs.fetchone()
    
# cursor는 한행씩 내려간다

 

 

GUI DB 프로그램

import sys
import pymysql
from PyQt5.QtWidgets import *

def connectDB():
    #필요한 db 정보
    host = "localhost"
    user = "root"
    pw = "Changmin97"
    db = "my_db"
    
    #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('ID')
        label2 = QLabel('ename')
        label3 = QLabel('job')
        label4 = QLabel('department')
    
    
        #self => 외부에서 접근 가능
        #text박스 생성 = QTextEdit
        self.text_id = QTextEdit()
        self.text_id.setFixedWidth(200)
        self.text_id.setFixedHeight(30)
    
    
        #버튼 생성, 버튼 클릭시 btn_1_clicked 실행
        btn_1 = QPushButton('Query')
        btn_1.clicked.connect(self.btn_1_clicked)
    
        #text박스 생성 = QTextEdit
        self.text_ename = QTextEdit()
        self.text_ename.setFixedWidth(200)
        self.text_ename.setFixedHeight(30)
    
        #text박스 생성 = QTextEdit
        self.text_job = QTextEdit()
        self.text_job.setFixedWidth(200)
        self.text_job.setFixedHeight(30)
    
        #text박스 생성 = QTextEdit
        self.text_dept = QTextEdit()
        self.text_dept.setFixedWidth(200)
        self.text_dept.setFixedHeight(30)
    
        #화면 배치, grid를 만들어 배치
        gbox = QGridLayout()
    
        gbox.addWidget(label1,0,0)
        gbox.addWidget(self.text_id, 0, 1)
            
        gbox.addWidget(btn_1, 0, 2)
            
        gbox.addWidget(label2,1,0)
        gbox.addWidget(self.text_ename, 1, 1)
            
        gbox.addWidget(label3,2,0)
        gbox.addWidget(self.text_job, 2, 1)
        
        gbox.addWidget(label4,3,0)
        gbox.addWidget(self.text_dept, 3, 1)
    

        self.setLayout(gbox)
        self.setWindowTitle('My Program')
        self.setGeometry(300, 300, 480,250) #창뜨는 위치, 크기
        self.show()
        
        
    #버튼 클릭 처리
    def btn_1_clicked(self):
    
        #사용자가 입력한 값 받아서 empno 저장
        empno = self.text_id.toPlainText()
            
        sql = "SELECT ename, job, danme \
                From emp e, dept d\
                where e.deptno = d.deptno\
                and empno = "+ empno
        #ex) ename '"+ename+"'" =>문자일 경우 따옴표 주의!
        conn = connectDB()
        curs = conn.cursor()
        curs.execute(sql)
            
        result = curs.fetchone() # sql 실행 결과 가져오기
            
        self.text_ename.setText(result[0])
        self.text_job.setText(result[1])
        self.text_dept.setText(restul[2])
            
        curs.close()
        disconnect(conn)
            
#END Class


#프로그램 실행, class를 생성하고 실행
if(__name__ == '__main__'):
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())            
    

 

ex 1) 

- 사원번호가 7521인 사원의 이름을 출력한다

- 이름이 SCOTT 인 사원의 부서이름을 출력한다

- 담당업무가 SALESMAN 인 모든사원의 이름을 출력한다.

- 모든 부서의 이름을 출력한다.

import pymysql #mysql과 연동하기 위해

#필요한 기본 DB 정보
host = "localhost"
user = "root"
pw = "Changmin97"
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()

 

 

 

 

ex 2)

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):
    
        #사용자가 입력한 값 받아 저장
        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
반응형

'공부 > 데이터베이스' 카테고리의 다른 글

index  (0) 2021.06.02
데이터 베이스 보안  (0) 2021.06.02
저장 함수 예제  (0) 2021.05.15
저장 프로시저 예제  (0) 2021.05.15
뷰 예제  (0) 2021.05.15
블로그 이미지

아상관없어

,