updata updatekline.py
This commit is contained in:
@@ -1,16 +1,17 @@
|
||||
"""
|
||||
#
|
||||
# 使用筛选器来更新股票列表
|
||||
# 使用筛选器来更新股票列表 <临时使用,功能是完整的,后面继续优化>
|
||||
#
|
||||
"""
|
||||
|
||||
from futu import *
|
||||
import time
|
||||
import logging
|
||||
from typing import List, Dict
|
||||
from MySQLHelper import MySQLHelper # 假设您已有MySQLHelper类
|
||||
from LogHelper import LogHelper
|
||||
|
||||
# 基本用法(自动创建日期日志+控制台输出)
|
||||
logger = LogHelper().setup()
|
||||
logger = LogHelper(logger_name = 'floatShare').setup()
|
||||
|
||||
class FutuStockFilter:
|
||||
def __init__(self, db_config:dict):
|
||||
@@ -24,7 +25,7 @@ class FutuStockFilter:
|
||||
self.quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
|
||||
return True
|
||||
except Exception as e:
|
||||
logging.error(f"连接Futu API失败: {str(e)}")
|
||||
logger.error(f"连接Futu API失败: {str(e)}")
|
||||
return False
|
||||
|
||||
def disconnect(self):
|
||||
@@ -48,10 +49,10 @@ class FutuStockFilter:
|
||||
try:
|
||||
with MySQLHelper(**self.db_config) as db:
|
||||
db.execute_update(create_table_sql)
|
||||
logging.info("数据库表准备就绪")
|
||||
logger.info("数据库表准备就绪")
|
||||
return True
|
||||
except Exception as e:
|
||||
logging.error(f"准备数据库表失败: {str(e)}")
|
||||
logger.error(f"准备数据库表失败: {str(e)}")
|
||||
return False
|
||||
|
||||
def process_filter_result(self, ret_list: List) -> List[Dict]:
|
||||
@@ -66,7 +67,7 @@ class FutuStockFilter:
|
||||
}
|
||||
processed_data.append(data)
|
||||
except Exception as e:
|
||||
logging.error(f"处理股票 {getattr(item, 'stock_code', '未知')} 数据失败: {str(e)}")
|
||||
logger.error(f"处理股票 {getattr(item, 'stock_code', '未知')} 数据失败: {str(e)}")
|
||||
|
||||
return processed_data
|
||||
|
||||
@@ -98,10 +99,10 @@ class FutuStockFilter:
|
||||
params.append(tuple(item.get(col) for col in columns))
|
||||
|
||||
affected_rows = db.execute_many(sql, params)
|
||||
logging.info(f"批量保存了 {len(data_batch)} 条记录,影响 {affected_rows} 行")
|
||||
logger.info(f"批量保存了 {len(data_batch)} 条记录,影响 {affected_rows} 行")
|
||||
return affected_rows
|
||||
except Exception as e:
|
||||
logging.error(f"批量保存失败: {str(e)}")
|
||||
logger.error(f"批量保存失败: {str(e)}")
|
||||
return 0
|
||||
|
||||
def run_direct_import(self):
|
||||
@@ -113,7 +114,7 @@ class FutuStockFilter:
|
||||
self.disconnect()
|
||||
return False
|
||||
|
||||
logging.info(f"================= start ===================")
|
||||
logger.info(f"================= start ===================")
|
||||
simple_filter = SimpleFilter()
|
||||
simple_filter.filter_min = 0
|
||||
simple_filter.filter_max = 100000000000000
|
||||
@@ -134,7 +135,7 @@ class FutuStockFilter:
|
||||
|
||||
if ret == RET_OK:
|
||||
last_page, all_count, ret_list = ls
|
||||
logging.info(f'获取股票列表进度: {nBegin}/{all_count}')
|
||||
logger.info(f'获取股票列表进度: {nBegin}/{all_count}')
|
||||
|
||||
# 处理并保存当前批次数据
|
||||
processed_data = self.process_filter_result(ret_list)
|
||||
@@ -144,17 +145,17 @@ class FutuStockFilter:
|
||||
|
||||
nBegin += len(ret_list)
|
||||
else:
|
||||
logging.error(f'获取股票列表错误: {ls}')
|
||||
logger.error(f'获取股票列表错误: {ls}')
|
||||
break
|
||||
|
||||
time.sleep(3) # 避免触发限频
|
||||
|
||||
logging.info(f"导入完成! 共导入 {total_imported} 条记录")
|
||||
logging.info(f"================= end ===================")
|
||||
logger.info(f"导入完成! 共导入 {total_imported} 条记录")
|
||||
logger.info(f"================= end ===================")
|
||||
return total_imported > 0
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"导入过程中发生错误: {str(e)}")
|
||||
logger.error(f"导入过程中发生错误: {str(e)}")
|
||||
return False
|
||||
finally:
|
||||
self.disconnect()
|
||||
Reference in New Issue
Block a user