当前位置: 首页 > 工具软件 > BaoStock > 使用案例 >

Python 利用Baostock 下载股票代码,写入Mysql数据库

公孙弘深
2023-12-01

        Baostock(证券宝)是一个免费、开源证券数据平台(无需注册)。详见点这里

首先,用pip安装baostock。win+r输入cmd进入命令提示符界面。输入pip install baostock

pip install baostock

        导入baostock,并且重命名为bs

import baostock as bs

        baostock下载股票代码,使用query_all_stock(day=None)函数

data = bs.query_all_stock().get_data()

        .get_data()方法把数据直接转化成pandas的DataFrame

定义函数get_stock_codes,该函数返回股票代码列表,该列表可以用来下载股票历史数据

def get_stock_codes(day=None):
    """
    利用baostock获取沪深两市的股票代码
    因为钱不够,所以剔除掉中小板,创业板和北交所的股票代码,指数代码也剔除掉吧
    :day: 日期,默认为空
    :return: 筛选后的股票代码列表
    """

    # 登入baostock
    bs.login()

    # 获取股票代码
    codes = bs.query_all_stock(day=day).get_data()

    # 股票代码筛选,剔除中小板,创业板,北交所以及指数代码
    df = codes[((codes['code'] < 'sz.300000') & (codes['code'] > 'sh689000')) | (
                (codes['code'] < 'sh.688000') & (codes['code'] > 'sh.009999'))]
    stock_codes_list = df['code'].to_list()

    # 登出baostock
    bs.logout()

    return stock_codes_list

        pymysql是Python用来操作Mysql的第三方库。同样用pip install 安装

pip install pymysql

        导包

import pymysql

        连接数据库,这里是提前建好了数据库stock_codes

db = pymysql.connect(host='localhost',
                         user='root',
                         password='123456',
                         database='STOCK_CODES',
                         port=3306,
                         charset='utf8')

        游标不要忘

cursor = db.cursor()

        当然,也可以用pymysq建库

db = pymysql.connect(host='localhost',
                         user='root',
                         password='123456',
                         port=3306,
                         charset='utf8')

# 获取游标
cursor = db.cursor()

# 建库
cursor.execute("CREATE DATABASE IF NOT EXISTS STOCK_CODES")

        建表,要申明表字段

cursor.execute("CREATE TABLE CODES(code char(10),tradeStatus int,code_name char(10)")

        定义codes_to_mysql()函数,将股票代码写入MySQL

def codes_to_mysql(codes):
    """
    将筛选后的股票代码些入MySQL数据库
    :param codes: 筛选后的股票代码
    :return: None
    """

    # 打开数据库连接
    db = pymysql.connect(host='localhost',
                         user='root',
                         password='123456',
                         database='STOCK_CODES',
                         port=3306,
                         charset='utf8')
    # 使用cursor()方法创建一个游标对象cursor
    cursor = db.cursor()

    # 使用execute()方法执行SQL,如果CODES表存在,则删除
    cursor.execute('DROP TABLE IF EXISTS CODES')

    #预处理sql语句
    sql = """CREATE TABLE CODES(code char(10),
                                tradeStatus int,
                                code_name char(10)"""
    cursor.execute(sql)


    bs.login()

    # 获取股票代码数据
    data = bs.query_all_stock().get_data()

    bs.logout()

    # 筛选股票代码
    data = data[data['code'].isin(codes)]

    for i in range(len(codes)):
        # SQL 插入语句
        sql1 = """INSERT INTO CODES(code,tradeStatus,code_name)
                VALUES ('%s','%s','%s')"""%(data.iloc[i].loc['code'],
                                            data.iloc[i].loc['tradeStatus'],
                                            data.iloc[i].loc['code_name'])

        cursor.execute(sql1)

    # 提交
    db.commit()

    # 关闭数据库
    db.close()

附:完整代码

import baostock as bs
import pymysql


def get_stock_codes(day=None):
    """
    利用baostock获取沪深两市的股票代码
    因为钱不够,所以剔除掉中小板,创业板和北交所的股票代码,指数代码也剔除掉吧
    :day: 日期,默认为空
    :return: 筛选后的股票代码列表
    """

    # 登入baostock
    bs.login()

    # 获取股票代码
    codes = bs.query_all_stock(day=day).get_data()

    # 股票代码筛选
    df = codes[((codes['code'] < 'sz.300000') & (codes['code'] > 'sh689000')) | (
                (codes['code'] < 'sh.688000') & (codes['code'] > 'sh.009999'))]
    stock_codes_list = df['code'].to_list()

    # 登出baostock
    bs.logout()

    return stock_codes_list


def codes_to_mysql(codes):
    """
    将筛选后的股票代码些入MySQL数据库
    :param codes: 筛选后的股票代码
    :return: None
    """

    # 打开数据库连接
    db = pymysql.connect(host='localhost',
                         user='root',
                         password='123456',
                         database='STOCK_CODES',
                         port=3306,
                         charset='utf8')
    # 使用cursor()方法创建一个游标对象cursor
    cursor = db.cursor()

    # 使用execute()方法执行SQL,如果CODES表存在,则删除
    cursor.execute('DROP TABLE IF EXISTS CODES')

    #预处理sql语句
    sql = """CREATE TABLE CODES(code char(10),
                                tradeStatus int,
                                code_name char(10)"""
    cursor.execute(sql)


    bs.login()

    # 获取股票代码数据
    data = bs.query_all_stock().get_data()

    bs.logout()

    # 筛选股票代码
    data = data[data['code'].isin(codes)]

    for i in range(len(codes)):
        # SQL 插入语句
        sql1 = """INSERT INTO CODES(code,tradeStatus,code_name)
                VALUES ('%s','%s','%s')"""%(data.iloc[i].loc['code'],
                                            data.iloc[i].loc['tradeStatus'],
                                            data.iloc[i].loc['code_name'])

        cursor.execute(sql1)

    # 提交
    db.commit()

    # 关闭数据库
    db.close()

codes_to_mysql(get_stock_codes())

 类似资料: