可转债正股数据入库

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函数即可开始插入数据到已存在的数据表中。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值