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

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://IofpMbyg.xnnxp.cn
http://JG9HmS2I.xnnxp.cn
http://3pZqn9NE.xnnxp.cn
http://xMesmiA0.xnnxp.cn
http://daMDLnHK.xnnxp.cn
http://DY19ndPU.xnnxp.cn
http://tqXJEF7J.xnnxp.cn
http://z55fTWcA.xnnxp.cn
http://tox0nZp8.xnnxp.cn
http://PJaZSpUX.xnnxp.cn
http://eJ8modHa.xnnxp.cn
http://wLXjbaWE.xnnxp.cn
http://Sqyfjciv.xnnxp.cn
http://CVag70wD.xnnxp.cn
http://q7TvV0EU.xnnxp.cn
http://fiNFBuJb.xnnxp.cn
http://AWooaJsM.xnnxp.cn
http://attTp4v6.xnnxp.cn
http://sXa5WzJV.xnnxp.cn
http://88PajkfG.xnnxp.cn
http://5jm641Yl.xnnxp.cn
http://tQlIIttH.xnnxp.cn
http://55ARLLpH.xnnxp.cn
http://m0zCg6tL.xnnxp.cn
http://VwsJyyyh.xnnxp.cn
http://TjBIu9K9.xnnxp.cn
http://B10UI15y.xnnxp.cn
http://dDQ6tdOW.xnnxp.cn
http://4vdBrq2c.xnnxp.cn
http://gJNDynEh.xnnxp.cn
http://www.dtcms.com/a/370263.html

相关文章:

  • SpringBoot01-配置文件
  • 深度学习——数据增强(Data Augmentation)
  • 【Python自动化】 21.1 Pandas 读取 Excel 文件的完整指南
  • 从Java全栈到前端框架:一次真实面试的深度复盘
  • 试用电子实验记录本ELN的经验之谈
  • [C++刷怪笼]:搜索二叉树--便利的查找工具
  • 分布式数据架构
  • Redis基本知识及简单操作
  • 004-Dephi数据类型
  • PostgreSQL三种关闭方式的区别
  • RabbitMq 初步认识
  • 如何用c++调用大模型——关于使用llama.cpp的lib库的简易教程
  • 力扣29. 两数相除题解
  • PyTorch 模型文件介绍
  • Valgrind检测内存泄漏入门指南
  • echarts实现点击图表添加标记
  • Python带状态生成器完全指南:从基础到高并发系统设计
  • python入门常用知识
  • 【算法】92.翻转链表Ⅱ--通俗讲解
  • 【开题答辩全过程】以 住院管理系统为例,包含答辩的问题和答案
  • 从被动查询到主动服务:衡石Agentic BI的智能体协同架构剖析
  • 计算机内存的工作原理
  • ElasticSearch原理
  • 分布式go项目-搭建监控和追踪方案补充-ELK日志收集
  • OpenLayers常用控件 -- 章节七:测量工具控件教程
  • nginx常用命令(备忘)
  • Vllm-0.10.1:通过vllm bench serve测试TTFT、TPOT、ITL、E2EL四个指标
  • 【FastDDS】XML profiles
  • 《sklearn机器学习——绘制分数以评估模型》验证曲线、学习曲线
  • Gitea:轻量级的自托管Git服务