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도 모르는데 풀어야하는 상황이라 혹시 더 괜찮은 방법이나 오류해결방법을 알고계시다면 도와주시면 감사하겠습니다.ㅠㅠ

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)