Anaconda의 spyder를 사용해서 mysql과 연동하여 윈도우 프로그램을 만드는 문제입니다. mysql에서는 정상적으로 작동하는데 spyder에서 실행시키면 문법 오류가 발생합니다. (장문주의)
조회수 497회
import sys
import pymysql
from PyQt5.QtWidgets import *
def connectDB():
host = "localhost"
user = "root"
pw = "****"
db = "world"
conn = pymysql.connect( host= host, user = user, password = pw, db = db)
return(conn)
def disconnectDB(conn):
conn.close()
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
label1 = QLabel('Country name')
label2 = QLabel('Continent')
label3 = QLabel('Population')
label4 = QLabel('GNP')
label5 = QLabel('Capital city')
label6 = QLabel('Language')
self.text_Country_name = QTextEdit()
self.text_Country_name.setFixedWidth(150)
self.text_Country_name.setFixedHeight(28)
btn_1 = QPushButton('Query')
btn_1.clicked.connect(self.btn_1_clicked)
self.text_Continent = QTextEdit()
self.text_Continent.setFixedWidth(150)
self.text_Continent.setFixedHeight(28)
self.text_Population = QTextEdit()
self.text_Population.setFixedWidth(150)
self.text_Population.setFixedHeight(28)
self.text_GNP = QTextEdit()
self.text_GNP.setFixedWidth(150)
self.text_GNP.setFixedHeight(28)
self.text_Capital_city = QTextEdit()
self.text_Capital_city.setFixedWidth(150)
self.text_Capital_city.setFixedHeight(28)
self.text_Language = QTextEdit()
self.text_Language.setFixedWidth(150)
self.text_Language.setFixedHeight(28)
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_Capital_city, 4, 1)
gbox.addWidget(label6, 5, 0)
gbox.addWidget(self.text_Language, 5, 1)
self.setLayout(gbox)
self.setWindowTitle('Country Info')
self.setGeometry(730,400, 480,250)
self.show()
def btn_1_clicked(self):
Country_name = self.text_Country_name.toPlainText()
sql = "select * from (select t.continent, t.population, t.gnp, c.Name as capital_city, l.language, l.Percentage, t.name \ from city c, country t, countrylanguage l \ where c.id = t.Capital and c.CountryCode = t.code and t.code = l.CountryCode \ order by l.Percentage desc limit 100000000) o \ group by capital_city \ having name = " + Country_name
conn = connectDB()
curs = conn.cursor()
curs.execute(sql)
result = curs.fetchone()
self.text_Continent.setText(result[0])
self.text_Population.setText(result[1])
self.text_GNP.setText(result[2])
self.text_Capital_city.setText(result[3])
self.text_Language.setText(result[4])
curs.close()
disconnectDB(conn)
if (__name__ == '__main__'):
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
Anaconda의 spyder를 사용해서 mysql과 연동하여 윈도우 프로그램을 만드는 문제입니다.
위의 이미지처럼 mysql의 기본 DB 중 world DB에 있는 국가 이름을 입력하면 그 국가의 정보가 출력되는 프로그램입니다.
사용한 테이블들입니다. 여기서
이런 식으로 city와 country와 countrylanguage를 조인시키고, 윈도우 프로그램에 보여줄 내용은 값 하나만 받아와야 하므로 가장 사용 빈도가 많은 언어를 뽑기 위해 정렬 후 그룹화시켜주었습니다. 보시다시피 mysql에서는 문제가 없습니다. 저기에 having을 사용해서 나라 이름을 찾아도 잘나옵니다. 하지만 spyder에서 실행시키면 이렇게 문법 오류나 아예 찾을 수 없다고 나옵니다. 제가 진짜 1도 모르는데 풀어야하는 상황이라 혹시 더 괜찮은 방법이나 오류해결방법을 알고계시다면 도와주시면 감사하겠습니다.ㅠㅠ
댓글 입력