可转债正股数据入库

akshare 中stock_zh_a_hist可以返回股票日线的数据,根据这些数据信息创建数据库表结构,然后把查到的数据入库
import configparser
import akshare as ak
import pandas as pd
import pymysql


class StockDataProcessor:
    def __init__(self, config_file):
        self.config_file = config_file
        self.db_host = None
        self.db_port = None
        self.db_user = None
        self.db_passwd = None
        self.db_database = None

    def load_config(self):
        config = configparser.ConfigParser()
        config.read(self.config_file)

        self.db_host = config.get('Database', 'host')
        self.db_port = int(config.get('Database', 'port'))
        self.db_user = config.get('Database', 'user')
        self.db_passwd = config.get('Database', 'passwd')
        self.db_database = config.get('Database', 'database')

    def fetch_stock_data(self, stock_code):
        stock_data = ak.stock_zh_a_hist(symbol=stock_code, period="daily",
                                        start_date="20180418",
                                        end_date="20240322",
                                        adjust="")
        df = pd.DataFrame(stock_data)
        return df

    def create_table(self, conn, stock_code):
        cursor = conn.cursor()

        # 删除已存在的表
        cursor.execute("DROP TABLE IF EXISTS stock_data")

        # 创建新表
        create_table_query = f'''
        CREATE TABLE stock_data (
            id INT PRIMARY KEY AUTO_INCREMENT,
            stock_code VARCHAR(10) COMMENT '股票代码',
            date DATE COMMENT '日期',
            open FLOAT COMMENT '开盘',
            close FLOAT COMMENT '收盘',
            high FLOAT COMMENT '最高',
            low FLOAT COMMENT '最低',
            volume FLOAT COMMENT '成交量',
            turnover FLOAT COMMENT '成交额',
            amplitude FLOAT COMMENT '振幅',
            change_rate FLOAT COMMENT '涨跌幅',
            change_amount FLOAT COMMENT '涨跌额',
            turnover_rate FLOAT COMMENT '换手率'
        )
        '''
        cursor.execute(create_table_query)

        cursor.close()

    def insert_data(self, conn, df, stock_code):
        cursor = conn.cursor()

        insert_query = '''
        INSERT INTO stock_data (stock_code, date, open, close, high, low, volume, turnover, amplitude, change_rate, change_amount, turnover_rate)
        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        '''
        data = df[['日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']].values.tolist()
        data = [[stock_code] + row for row in data]  # 在数据行前添加股票代码
        cursor.executemany(insert_query, data)

        conn.commit()
        cursor.close()

    def process_stock_data(self):
        self.load_config()

        stock_code = input("请输入股票代码: ")

        conn = pymysql.connect(
            host=self.db_host,
            port=self.db_port,
            user=self.db_user,
            passwd=self.db_passwd,
            database=self.db_database
        )

        df = self.fetch_stock_data(stock_code)

        self.create_table(conn, stock_code)
        self.insert_data(conn, df, stock_code)

        conn.close()


def main():
    config_file = 'config.ini'
    processor = StockDataProcessor(config_file)
    processor.process_stock_data()


if __name__ == '__main__':
    main()

在运行程序之前,请确保已经安装了configparseraksharepandaspymysql库,并根据你的需求修改config.ini配置文件和fetch_stock_data方法中的股票数据获取参数。然后,运行main函数即可开始插入数据到已存在的数据表中。

<think>好的,用户现在问到了akshare库,我需要详细回答。首先,我得回忆一下akshare的基本信息。AKShare是一个基于Python的开源财经数据接口库,主要面向金融量化分析。用户可能需要知道它的主要功能、安装方法、基本使用示例以及可能遇到的问题。 首先,我应该介绍AKShare是什么,它的主要用途是什么。然后,给出安装方法,包括常规安装和国内镜像加速,因为国内用户可能会遇到安装速度慢的问题。接着,提供一个简单的代码示例,比如获取股票历史数据,并解释代码的每一部分,这样用户能清楚如何调用接口。同时,可能还需要提到常见错误,比如网络问题或接口变动,以及解决方法。 然后,用户可能想知道如何处理获取到的数据,比如保存到CSV或数据库,所以需要给出相应的代码示例。这部分可以展示pandas库的基本操作,因为AKShare返回的数据通常是DataFrame格式。 接下来是注意事项,比如数据频率限制、数据更新和维护情况,这些对用户的实际使用很重要,避免他们在使用时遇到问题却不知原因。最后,相关问题部分需要涵盖AKShare的其他功能,高级用法,替代库比较,以及数据预处理方法。这些问题能帮助用户进一步探索和使用AKShare,同时也能引导他们学习更多相关知识。 在编写代码示例时,要确保代码确,并且有注释解释每一步的作用。例如,获取股票数据的示例中,需要导入akshare,调用stock_zh_a_hist函数,处理可能的异常,并展示数据保存的方法。同时,注意异常处理的部分,因为网络请求可能会失败,用户需要知道如何处理这种情况。 总结来说,回答的结构应该是先介绍库的基本情况,然后安装方法,接着使用示例和代码解释,注意事项,最后相关问题。这样用户能够从零开始了解并使用AKShare,同时也能解决可能遇到的问题,并深入探索更多功能。</think>Share 是基于 Python 的开源财经数据接口库,主要面向金融量化分析。以下是详细说明和示例: 1. **核心功能**: - 股票、期货、基金等金融数据 - 宏观经济指标 - 新闻舆情数据 - 区块链数据 - 外汇汇率等 2. **安装方法**: ```bash # 基础安装 pip install akshare # 国内镜像加速 pip install akshare -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 3. **基础使用示例(获取股票历史数据)**: ```python import akshare as ak def get_stock_history(symbol, period): try: df = ak.stock_zh_a_hist( symbol=symbol, period=period, # "daily", "weekly", "monthly" adjust="hfq" # 前复权 ) return df except Exception as e: print(f"获取数据失败: {str(e)}") return None # 获取贵州茅台日线数据 data = get_stock_history("600519", "daily") if data is not None: print(data[['日期', '开盘', '最高', '最低', '收盘']].head()) data.to_csv("600519_daily.csv", index=False) ``` 4. **数据存储示例(MySQL)**: ```python from sqlalchemy import create_engine def save_to_mysql(df, table_name): engine = create_engine('mysql+pymysql://user:password@localhost:3306/finance') try: df.to_sql( name=table_name, con=engine, if_exists='append', index=False ) print("存储成功") except Exception as e: print(f"存储失败: {str(e)}") # 调用示例 # save_to_mysql(data, "stock_daily") ``` 5. **注意事项**: - 需要稳定的网络环境 - 部分接口有访问频率限制 - 数据源可能变更接口格式 - 建议配合 Pandas 进行数据分析 - 实时行情数据需使用专业版接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值