当前位置: 首页 > ds >正文

python炒股

python 获取股票历史数据存入mysql

# -*- coding: gbk -*-

import akshare as ak
import pymysql
from datetime import datetime, timedelta

def get_previous_trading_day():
today = datetime.now()
# 简单实现获取上一个交易日(实际应排除周末和节假日)
return (today - timedelta(days=1)).strftime("%Y%m%d")

def store_stock_data(symbol, months=6):
try:
# 创建数据库连接
mydb = pymysql.connect(
host="mysql.sqlpub.com",
user="cybroot",
password="uf3HbUuawr17GtmF",
database="cyb_database",
port=3306,
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
mycursor = mydb.cursor()
# 准备表结构
create_table_sql = f"""
CREATE TABLE IF NOT EXISTS `trading_daily_data` (
`date` DATE NOT NULL,
`open` DECIMAL(10,2),
`close` DECIMAL(10,2),
`high` DECIMAL(10,2),
`low` DECIMAL(10,2),
`volume` BIGINT,
`amount` DECIMAL(15,2),
`amplitude` DECIMAL(5,2),
`change_percent` DECIMAL(5,2),
`change_amount` DECIMAL(10,2),
`turnover_rate` DECIMAL(5,2),
PRIMARY KEY (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
"""
#mycursor.execute(create_table_sql)

# 计算半年前的日期
end_date = get_previous_trading_day()
start_date = (datetime.now() - timedelta(days=30*months)).strftime("%Y%m%d")

current_date = start_date
batch_size = 5  # 每次处理5条数据

while current_date < end_date:
# 获取5条数据
df = ak.stock_zh_a_hist(
symbol=symbol,
period="daily",
start_date=current_date,
end_date=end_date
).head(batch_size)

if df.empty:
break

# 存储数据到MySQL
for _, row in df.iterrows():
sql = f"""
INSERT INTO trading_daily_data 
(date, open, close, high, low, volume, amount, amplitude, change_percent, change_amount, turnover_rate, code) 
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
val = (
row['日期'], row['开盘'], row['收盘'],
row['最高'], row['最低'], row['成交量'],
row['成交额'], row['振幅'], row['涨跌幅'], row['涨跌额'], row['换手率'], row['股票代码']
)
mycursor.execute(sql, val)

mydb.commit()
print(f"已存储{len(df)}条数据,日期范围: {df['日期'].min()} 至 {df['日期'].max()}")

# 修正时间处理部分
if not df.empty:
last_date_str = df['日期'].max().strftime("%Y%m%d")
last_date = datetime.strptime(last_date_str, "%Y%m%d")
current_date = (last_date + timedelta(days=1)).strftime("%Y%m%d")

except Exception as e:
print(f"发生错误: {str(e)}")
finally:
if 'mydb' in locals() and mydb:
mycursor.close()
mydb.close()

if __name__ == "__main__":
store_stock_data(symbol="600562", months=6)
------------------------------------------------------------------------------------------------------------

http://www.xdnf.cn/news/20525.html

相关文章:

  • C++ 20 新增特性以及代码示例
  • 同态加密库(Google FHE)
  • 神经网络的初始化:权重与偏置的数学策略
  • C# WinForm分页控件实现与使用详解
  • B.50.10.09-RPC核心原理与电商应用
  • MATLAB R2025a安装配置及使用教程(超详细保姆级教程)
  • 什么是云手机?
  • Vue3 - Echarts自定义主题引入(Error:ECharts is not Loaded,Error:default ,Error:module)
  • 攻击服务器的方式有哪些,对应的应对策略有哪些?
  • 联邦学习论文分享:Towards Building the Federated GPT:Federated Instruction Tuning
  • Leetcode hot100 最长连续序列
  • rh134第五章复习总结
  • SDRAM详细分析-08 数据手册解读
  • AI + 办公工具 = 应用案例
  • (论文速读)视觉语言模型评价中具有挑战性的选择题的自动生成
  • 大模型推理时的加速思路?
  • RabbitMq 初步认识
  • 自动化运维之ansible
  • LwIP入门实战 — 3 LwIP的网络接口管理
  • HTB devvortex
  • 【混元AIGC+腾讯云智能体+首创Coze核心流思维导图MCP】:打造一个文思通-智能写作助手Agent
  • 深入浅出 JVM 类加载器:分类、双亲委派与打破机制
  • 使用函数调用对整形数组进行排序
  • 贪心算法在医疗影像分割中的应用详解
  • 小型磨床设计cad+三维图+设计说明书
  • 代理连接性能优化:提升网络效率的关键技术与实践
  • 表格识别技术:通过计算机视觉和OCR,实现非结构化表格向结构化数据的转换,推动数字化转型。
  • Python中不定长参数的基础使用
  • 网络基础篇---以太网链路聚合(静态LACP方式)
  • C++ 面试高频考点 LCR 137. 点名 二分查找 题解 每日一题