update ui
This commit is contained in:
32
app.py
32
app.py
@@ -68,6 +68,17 @@ def load_trading_days():
|
||||
print(f"加载交易日数据失败: {e}")
|
||||
|
||||
|
||||
def row_to_dict(row):
|
||||
"""
|
||||
将 SQLAlchemy Row 对象转换为字典
|
||||
兼容 SQLAlchemy 1.4+ 版本
|
||||
"""
|
||||
if row is None:
|
||||
return None
|
||||
# 使用 _mapping 属性来访问列数据
|
||||
return dict(row._mapping)
|
||||
|
||||
|
||||
def get_trading_day_near_date(target_date):
|
||||
"""
|
||||
获取距离目标日期最近的交易日
|
||||
@@ -5642,7 +5653,8 @@ def get_stock_basic_info(stock_code):
|
||||
|
||||
# 转换为字典
|
||||
basic_info = {}
|
||||
for key, value in zip(result.keys(), result):
|
||||
result_dict = row_to_dict(result)
|
||||
for key, value in result_dict.items():
|
||||
if isinstance(value, datetime):
|
||||
basic_info[key] = value.strftime('%Y-%m-%d')
|
||||
elif isinstance(value, Decimal):
|
||||
@@ -5685,7 +5697,7 @@ def get_stock_announcements(stock_code):
|
||||
announcements = []
|
||||
for row in result:
|
||||
announcement = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
announcement[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
@@ -5734,7 +5746,7 @@ def get_stock_disclosure_schedule(stock_code):
|
||||
schedules = []
|
||||
for row in result:
|
||||
schedule = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
schedule[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
@@ -5815,7 +5827,7 @@ def get_stock_actual_control(stock_code):
|
||||
control_info = []
|
||||
for row in result:
|
||||
control_record = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
control_record[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
@@ -5864,7 +5876,7 @@ def get_stock_concentration(stock_code):
|
||||
concentration_info = []
|
||||
for row in result:
|
||||
concentration_record = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
concentration_record[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
@@ -5933,7 +5945,7 @@ def get_stock_management(stock_code):
|
||||
management_info = []
|
||||
for row in result:
|
||||
management_record = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
management_record[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
@@ -5992,7 +6004,7 @@ def get_stock_top_circulation_shareholders(stock_code):
|
||||
shareholders_info = []
|
||||
for row in result:
|
||||
shareholder_record = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
shareholder_record[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
@@ -6051,7 +6063,7 @@ def get_stock_top_shareholders(stock_code):
|
||||
shareholders_info = []
|
||||
for row in result:
|
||||
shareholder_record = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
shareholder_record[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
@@ -6102,7 +6114,7 @@ def get_stock_branches(stock_code):
|
||||
branches_info = []
|
||||
for row in result:
|
||||
branch_record = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
branch_record[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
@@ -6169,7 +6181,7 @@ def get_stock_patents(stock_code):
|
||||
patents_info = []
|
||||
for row in result:
|
||||
patent_record = {}
|
||||
for key, value in zip(row.keys(), row):
|
||||
for key, value in row_to_dict(row).items():
|
||||
if value is None:
|
||||
patent_record[key] = None
|
||||
elif isinstance(value, datetime):
|
||||
|
||||
Reference in New Issue
Block a user