From 801b65098026542b1dc70181f52178e9de6abe8f Mon Sep 17 00:00:00 2001 From: dosangyoon Date: Fri, 29 Jul 2022 16:26:22 +0900 Subject: [PATCH] init --- HTS_122630.py | 3 +- HTS_252670.py | 3 +- hts/HTS.py | 11 +++--- resources/hts.db | Bin 57344 -> 0 bytes stock/util/DBManager.py | 79 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 88 insertions(+), 8 deletions(-) delete mode 100644 resources/hts.db create mode 100644 stock/util/DBManager.py diff --git a/HTS_122630.py b/HTS_122630.py index a888495..3acb9c4 100644 --- a/HTS_122630.py +++ b/HTS_122630.py @@ -188,6 +188,7 @@ if __name__ == "__main__": # KODEX 인버스 * 2 stock_code = "122630" + stock_name = "KODEX 레버리지" buy_count = 80 hts = HTS_122630(RESOURCE_PATH, stock_code, buy_count) @@ -203,6 +204,6 @@ if __name__ == "__main__": hts.writeStockData(stock_code, today_str) db_filename = os.path.join(RESOURCE_PATH, "hts.db") - hts.insertStockData(db_filename, stock_code, "KODEX 레버리지", today_str) + hts.insertStockData(db_filename, stock_code, stock_name, today_str) print ("done...") diff --git a/HTS_252670.py b/HTS_252670.py index ee7d25f..d77a2ce 100644 --- a/HTS_252670.py +++ b/HTS_252670.py @@ -192,6 +192,7 @@ if __name__ == "__main__": # KODEX 인버스 * 2 stock_code = "252670" + stock_name = "KODEX 200선물인버스2X" buy_count = 100 hts = HTS_252670(RESOURCE_PATH, stock_code, buy_count) @@ -207,6 +208,6 @@ if __name__ == "__main__": hts.writeStockData(stock_code, today_str) db_filename = os.path.join(RESOURCE_PATH, "hts.db") - hts.insertStockData(db_filename, stock_code, "KODEX 200선물인버스2X", today_str) + hts.insertStockData(db_filename, stock_code, stock_name, today_str) print ("done...") diff --git a/hts/HTS.py b/hts/HTS.py index e7d9789..30fd41a 100644 --- a/hts/HTS.py +++ b/hts/HTS.py @@ -472,6 +472,8 @@ class HTS: items = self.getStockInfo(stock_code, today) + conn = sqlite3.connect(inFileName) + cursor = conn.cursor() idx = 0 for item in items: ymd = item[0] @@ -484,9 +486,6 @@ class HTS: idx += 1 - conn = sqlite3.connect(inFileName) - cursor = conn.cursor() - cursor.execute('DELETE FROM ' + tableName + ' WHERE CODE=? and ymd=? and hms=?', (stock_code, ymd, hms,)) cursor.execute('SELECT * FROM ' + tableName + ' WHERE CODE=? and ymd=? and hms=?', (stock_code, ymd, hms,)) result = cursor.fetchone() @@ -495,9 +494,9 @@ class HTS: "INSERT INTO " + tableName + "(CODE, NAME, ymd, hms, close, open, high, low, volume) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", (stock_code, stock_name, ymd, hms, close, open, high, low, volume)) - conn.commit() - cursor.close() - conn.close() + conn.commit() + cursor.close() + conn.close() print("insert...", stock_code, stock_name, today) return diff --git a/resources/hts.db b/resources/hts.db deleted file mode 100644 index 9725c4d617ec4bb7e6ee4a8f078e878f391366e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57344 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 0: + stock_code = "252670" + stock_name = "KODEX 200선물인버스2X" + elif fileName.find("122630") >= 0: + stock_code = "252670" + stock_name = "KODEX 레버리지" + if stock_code is None or stock_name is None: + continue + + infp = open(fileName, 'r', encoding='utf-8') + reader = csv.reader(infp) + next(reader) + + for rows in reader: + ymd = rows[0] # hts.날짜 + hms = rows[1] # hts.시간 + open_v = rows[2] # hts.시가 + high = rows[3] # hts.고가 + low = rows[4] # hts.저가 + close = rows[5] # hts.종가 + volume = rows[6] # hts.거래량 + + cursor.execute('DELETE FROM ' + tableName + ' WHERE CODE=? and ymd=? and hms=?', (stock_code, ymd, hms,)) + cursor.execute('SELECT * FROM ' + tableName + ' WHERE CODE=? and ymd=? and hms=?', (stock_code, ymd, hms,)) + result = cursor.fetchone() + if result == None: + cursor.execute("INSERT INTO " + tableName + "(CODE, NAME, ymd, hms, close, open, high, low, volume) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", + (stock_code, stock_name, ymd, hms, close, open_v, high, low, volume)) + infp.close() + print("insert...", stock_code, stock_name, fileName) + + conn.commit() + cursor.close() + conn.close() + + return + +if __name__ == "__main__": + PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__)))))) + RESOURCE_PATH = os.path.join(PROJECT_HOME, "resources") + + dbManager = DBManager() + + db_filename = os.path.join(RESOURCE_PATH, "hts.db") + hts_dir = os.path.join(RESOURCE_PATH, "hts", "*.csv") + dbManager.insert(db_filename, hts_dir) \ No newline at end of file