INVESTAR / StockAnalysisInPython

456 stars 412 forks source link

챕터5 > DBUpdater.py #9

Closed woo9904 closed 3 years ago

woo9904 commented 3 years ago

안녕하세요

DBUpdater.py에 문제가 있어 고민하다가 해결해 다른분들도 똑같은 문제가 있을 까봐 문제와 해결방법을 올립니다.

Traceback (most recent call last): File "C:\Python\Python38\lib\site-packages\pandas\core\indexes\base.py", line 2889, in get_loc return self._engine.get_loc(casted_key) File "pandas_libs\index.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc File "pandas_libs\index.pyx", line 97, in pandas._libs.index.IndexEngine.get_loc File "pandas_libs\hashtable_class_helper.pxi", line 1675, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas_libs\hashtable_class_helper.pxi", line 1683, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'code'

The above exception was the direct cause of the following exception: Traceback (most recent call last): File "c:/Users/skwjd/OneDrive/문서/myPackage/Woo/te.py", line 169, in dbu.execute_daily() File "c:/Users/skwjd/OneDrive/문서/myPackage/Woo/te.py", line 136, in execute_daily self.update_comp_info() File "c:/Users/skwjd/OneDrive/문서/myPackage/Woo/te.py", line 58, in update_comp_info self.codes[df['code'].values[idx]] = df['company'].values[idx] File "C:\Python\Python38\lib\site-packages\pandas\core\frame.py", line 2899, in getitem indexer = self.columns.get_loc(key) File "C:\Python\Python38\lib\site-packages\pandas\core\indexes\base.py", line 2891, in get_loc raise KeyError(key) from err KeyError: 'code'

이처럼 KeyError: 'code'가 뜰 경우 def update_comp_info(self): """종목코드를 company_info 테이블에 업데이트한 후 딕셔너리에 저장""" 부분에서

        self.codes[df['CODE'].values[idx]]=df['company'].values[idx] 로 하시면 됩니다.

책에서는 ['code']라고 소문자로 되어있지만 ["CODE"]라 해야 해결이 되더라구요 . 저만의 문제인지 다들 문제가 생길지는 모르겠지만 참고하세요!

woo9904 commented 3 years ago

나~~중에 다른코드 작성하면서 알게되었는데 mariaDB 처음 생성할때, with self.conn.cursor() as curs: sql=""" CREATE TABLE IF NOT EXISTS company_info ( code VARCHAR(20), company VARCHAR(40), last_update DATE, PRIMARY KEY (code) ); """ curs.execute(sql) sql=''' CREATE TABLE IF NOT EXISTS daily_price( code VARCHAR(20), date DATE, open BIGINT(20), high BIGINT(20), low BIGINT(20), close BIGINT(20), diff BIGINT(20), volume BIGINT(20), PRIMARY KEY (code, date) ); ''' 이 문장을 heidiSQL에 직접 입력하게 되면 code가 CODE로 대문자로 자동으로 변경됩니다.

그래서 저는 대문자로 'CODE'라 해야했고, 다른분들은 코드로 위처럼 입력할 경우 저와 같은 문제는 일어나지 않을겁니다.

INVESTAR commented 3 years ago

안녕하세요. 김황후입니다.

제가 혹시나해서 HeidiSQL 10.2.0.5599에서 다시 쿼리문을 입력해 봤는데 제 PC에서는 code가 CODE로 바뀌는 현상은 없었습니다.

HeidiSQL 버전 차이 때문이거나 설정 차이 때문일 것 같은데 오류가 발생하는 분은 woo9904님이 알려주신 내용을 참고하면 좋을 것 같습니다.

의견 주셔서 감사합니다.

On Sun, 15 Nov 2020 at 23:36, woo9904 notifications@github.com wrote:

나~~중에 다른코드 작성하면서 알게되었는데 mariaDB 처음 생성할때, with self.conn.cursor() as curs: sql=""" CREATE TABLE IF NOT EXISTS company_info ( code VARCHAR(20), company VARCHAR(40), last_update DATE, PRIMARY KEY (code) ); """ curs.execute(sql) sql=''' CREATE TABLE IF NOT EXISTS daily_price( code VARCHAR(20), date DATE, open BIGINT(20), high BIGINT(20), low BIGINT(20), close BIGINT(20), diff BIGINT(20), volume BIGINT(20), PRIMARY KEY (code, date) ); ''' 이 문장을 heidiSQL에 직접 입력하게 되면 code가 CODE로 대문자로 자동으로 변경됩니다.

그래서 저는 대문자로 'CODE'라 해야했고, 다른분들은 코드로 위처럼 입력할 경우 저와 같은 문제는 일어나지 않을겁니다.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/INVESTAR/StockAnalysisInPython/issues/9#issuecomment-727579536, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEDW7VPAJUIXWFA4HX56J6DSP7RNDANCNFSM4TV73DBQ .