初始提交

This commit is contained in:
oficcejo
2025-10-04 11:01:37 +08:00
commit f52c3ef5b3
29 changed files with 7023 additions and 0 deletions
+157
View File
@@ -0,0 +1,157 @@
import sqlite3
import json
from datetime import datetime
import os
class StockAnalysisDatabase:
def __init__(self, db_path="stock_analysis.db"):
"""初始化数据库连接"""
self.db_path = db_path
self.init_database()
def init_database(self):
"""初始化数据库表结构"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
# 创建分析记录表
cursor.execute('''
CREATE TABLE IF NOT EXISTS analysis_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
symbol TEXT NOT NULL,
stock_name TEXT,
analysis_date TEXT NOT NULL,
period TEXT NOT NULL,
stock_info TEXT,
agents_results TEXT,
discussion_result TEXT,
final_decision TEXT,
created_at TEXT NOT NULL
)
''')
conn.commit()
conn.close()
def save_analysis(self, symbol, stock_name, period, stock_info, agents_results, discussion_result, final_decision):
"""保存分析记录到数据库"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
# 准备数据
analysis_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
created_at = datetime.now().isoformat()
# 将复杂对象转换为JSON字符串
stock_info_json = json.dumps(stock_info, ensure_ascii=False, default=str)
agents_results_json = json.dumps(agents_results, ensure_ascii=False, default=str)
discussion_result_json = json.dumps(discussion_result, ensure_ascii=False, default=str)
final_decision_json = json.dumps(final_decision, ensure_ascii=False, default=str)
cursor.execute('''
INSERT INTO analysis_records
(symbol, stock_name, analysis_date, period, stock_info, agents_results, discussion_result, final_decision, created_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (symbol, stock_name, analysis_date, period, stock_info_json, agents_results_json, discussion_result_json, final_decision_json, created_at))
conn.commit()
conn.close()
return cursor.lastrowid
def get_all_records(self):
"""获取所有分析记录"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('''
SELECT id, symbol, stock_name, analysis_date, period, final_decision, created_at
FROM analysis_records
ORDER BY created_at DESC
''')
records = cursor.fetchall()
conn.close()
result = []
for record in records:
# 解析final_decision获取评级
final_decision = json.loads(record[5]) if record[5] else {}
rating = final_decision.get('rating', '未知') if isinstance(final_decision, dict) else '未知'
result.append({
'id': record[0],
'symbol': record[1],
'stock_name': record[2],
'analysis_date': record[3],
'period': record[4],
'rating': rating,
'created_at': record[6]
})
return result
def get_record_count(self):
"""获取记录总数"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM analysis_records')
count = cursor.fetchone()[0]
conn.close()
return count
def get_record_by_id(self, record_id):
"""根据ID获取详细分析记录"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('''
SELECT * FROM analysis_records WHERE id = ?
''', (record_id,))
record = cursor.fetchone()
conn.close()
if not record:
return None
# 解析JSON数据
return {
'id': record[0],
'symbol': record[1],
'stock_name': record[2],
'analysis_date': record[3],
'period': record[4],
'stock_info': json.loads(record[5]) if record[5] else {},
'agents_results': json.loads(record[6]) if record[6] else {},
'discussion_result': json.loads(record[7]) if record[7] else {},
'final_decision': json.loads(record[8]) if record[8] else {},
'created_at': record[9]
}
def delete_record(self, record_id):
"""删除指定记录"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('DELETE FROM analysis_records WHERE id = ?', (record_id,))
conn.commit()
conn.close()
return cursor.rowcount > 0
def get_record_count(self):
"""获取记录总数"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM analysis_records')
count = cursor.fetchone()[0]
conn.close()
return count
# 全局数据库实例
db = StockAnalysisDatabase()