본문 바로가기
KNOWLEDGE/데이터베이스

PyMySql, pandas 설치 오류 해결 - python에서 MySQL 사용해 DB 접근하기

by 뭉망뭉 2022. 4. 14.

(무한디버깅)

파이썬 버전이 여러 개 있고, 아나콘다까지 설치되어있는 내 노트북 환경이 오류가 난 주 원인이었다.

 

 

이제부터 PyMySQL모듈 설치 과정,  Python으로 MySQL을 사용해 DB에 접근하는 과정을 보도록 하자. (윈도우 기준)

 

1. PyMySQL 모듈 설치하기

a. 환경변수 편집

  1. 윈도우 검색창에서 python.exe 검색 후 '파일 위치 열기' 클릭
  2. Scripts 폴더 찾아서 들어간 후 경로 복사
  3. 윈도우 검색해서 시스템 환경 변수 편집으로 들어감
  4. 환경변수(N) 클릭
  5. 시스템변수에서 'Path' 클릭 후 편집 클릭
  6. '새로만들기' 클릭 후 2번에서 복사한 경로를 붙여넣기, 확인
  7. cmd에서 pip 검색

위 화면이 나오면 성공!

 

 

b. 모듈 설치

그리고 문제의 모듈 설치 부분이다.

1. cmd 창에 pip install pymysql 입력


그리고 나온 나의 오류 화면

더보기

C:\Program Files\anaconda3\Scripts>pip install pymysql
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pymysql/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pymysql/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pymysql/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pymysql/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pymysql/
Could not fetch URL https://pypi.org/simple/pymysql/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pymysql/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
ERROR: Could not find a version that satisfies the requirement pymysql (from versions: none)
ERROR: No matching distribution found for pymysql
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping

구글링을 해서 나온 방법인 pip install 시 

--trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org

추가 등 여러 방법을 해봐도 되지 않았다.

컴퓨터에 파이썬 버전이 여러 개이고 주피터 노트북을 설치해서 anaconda가 있을 경우 여러 버전 중 어떤 파이썬을 선택해야 할지 뇌정지가 와서 오류를 뱉는다고 한다. 

 

cmd창인 Anaconda Powershell Prompt에서 pip install pymysql 실행을 하니까 정상적으로 설치가 됐다.

더보기

Collecting pymysql
  Using cached PyMySQL-1.0.2-py3-none-any.whl (43 kB)
Installing collected packages: pymysql
Successfully installed pymysql-1.0.2

그렇지만 python IDLE에서는 이렇게 설치한 모듈을 읽지 못했다...

더보기

>>> import pymysql
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import pymysql
ModuleNotFoundError: No module named 'pymysql'
>>> pymysql
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    pymysql
NameError: name 'pymysql' is not defined
>>> 

ModuleNotFoundError로 찾아보면 그냥 pymysql이 설치되지 않아 생긴 오류라는데 난 이미 설치해도 읽지 못하는 문제라 해당이 되지 않았다.

 

Anaconda Powershell Prompt에서 파이썬으로 접근 후 실행을 해봤더니 정상적으로 되었다.


 

 

2. Python으로 MySQL을 사용해 DB 접근하기

1. IDLE또는 새 파일을 열어 다음과 같이 입력하고 저장한 후 실행

import pymysql
import pandas as pd
con = pymysql.connect(host='localhost', user='root', password='try1234',
                    db='testdb', charset='utf8', autocommit=True, 
                    cursorclass=pymysql.cursors.DictCursor
                    )
cur = con.cursor()

sql = "SELECT * FROM dept" 
cur.execute(sql)
rows = cur.fetchall()
con.close()

customers = pd.DataFrame(rows)
print(customers)

password에는 본인의 루트 비밀번호 적어주기! 

 

나의 경우에는 3306 포트에는 mariaDB가 이미 돌아가고 있어서 MySQL 설치 시 3307 포트로 했고, 그래서 포트도 적어줬다. 

con = pymysql.connect(host='localhost', user='root', password='myPW',
                    db='testdb', charset='utf8', autocommit=True, port=3307,
                    cursorclass=pymysql.cursors.DictCursor
                    )

 


나의 문제는 파이썬 프로그램이 저 모듈들을 전혀 인식을 못하고 있어서 파이썬 내에서 import 불가하다는 것이다.

Anaconda Powershell Prompt에서 실행해보려고 했으나

더보기

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\anaconda3\lib\site-packages\pymysql\connections.py", line 353, in __init__
    self.connect()
  File "C:\Program Files\anaconda3\lib\site-packages\pymysql\connections.py", line 633, in connect
    self._request_authentication()
  File "C:\Program Files\anaconda3\lib\site-packages\pymysql\connections.py", line 907, in _request_authentication
    auth_packet = self._read_packet()
  File "C:\Program Files\anaconda3\lib\site-packages\pymysql\connections.py", line 725, in _read_packet
    packet.raise_for_error()
  File "C:\Program Files\anaconda3\lib\site-packages\pymysql\protocol.py", line 221, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "C:\Program Files\anaconda3\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.OperationalError: (1049, "Unknown database 'testdb'")

"Unknown database 'testdb'"가 나왔다.

 

저장해서 실행하면 달라질까 싶어서 위 코드 내용이 담긴 py 파일을 저장했고, 그 경로로 이동해서 Anaconda Powershell Prompt에서 파일을 실행했다.

더보기

Traceback (most recent call last):
  File "test_pymysql.py", line 2, in <module>
    import pandas as pd
  File "C:\Program Files\anaconda3\lib\site-packages\pandas\__init__.py", line 22, in <module>
    from pandas.compat import (
  File "C:\Program Files\anaconda3\lib\site-packages\pandas\compat\__init__.py", line 15, in <module>
    from pandas.compat.numpy import (
  File "C:\Program Files\anaconda3\lib\site-packages\pandas\compat\numpy\__init__.py", line 7, in <module>
    from pandas.util.version import Version
  File "C:\Program Files\anaconda3\lib\site-packages\pandas\util\__init__.py", line 1, in <module>
    from pandas.util._decorators import (  # noqa
  File "C:\Program Files\anaconda3\lib\site-packages\pandas\util\_decorators.py", line 14, in <module>
    from pandas._libs.properties import cache_readonly  # noqa
  File "C:\Program Files\anaconda3\lib\site-packages\pandas\_libs\__init__.py", line 13, in <module>
    from pandas._libs.interval import Interval
  File "pandas\_libs\interval.pyx", line 1, in init pandas._libs.interval
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject

다른 오류가 나온다.

 

numpy 문제인 것 같아서 pip install numpy로 설치해줬더니

정상적으로 읽어왔다!!!!

 

MySql에서 실행되는 결과와 같은 걸 확인할 수 있다. 

 

다른 테이블도 정상적으로 읽어온다. 휴^^,,,,

 

 

더보기

박영호 교수님의 데이터베이스 강의 과정을 참고하였습니다. 

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

[Database] 데이터 모델  (0) 2022.11.21

댓글