(무한디버깅)
파이썬 버전이 여러 개 있고, 아나콘다까지 설치되어있는 내 노트북 환경이 오류가 난 주 원인이었다.
이제부터 PyMySQL모듈 설치 과정, Python으로 MySQL을 사용해 DB에 접근하는 과정을 보도록 하자. (윈도우 기준)
1. PyMySQL 모듈 설치하기
a. 환경변수 편집
- 윈도우 검색창에서 python.exe 검색 후 '파일 위치 열기' 클릭
- Scripts 폴더 찾아서 들어간 후 경로 복사
- 윈도우 검색해서 시스템 환경 변수 편집으로 들어감
- 환경변수(N) 클릭
- 시스템변수에서 'Path' 클릭 후 편집 클릭
- '새로만들기' 클릭 후 2번에서 복사한 경로를 붙여넣기, 확인
- 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 |
---|
댓글