tushare踩坑经验--数据存入本地mysql

tushare踩坑经验--数据存入本地mysql

踩坑

作为一个第一次接触tushare的小新手,在csdn关于tushare的文章里研究了蛮久,本文是总结了详细的踩坑记录,好在想明白后,存其他数据就轻而易举了,在此也感谢tushare团队,能让我有机会学到在学校学不到的知识。
id:475661
tushare链接:https://tushare.pro/register?reg=475661

from time import time
import datetime
import pandas as pd
from sqlalchemy.sql.expression import update
import tushare as ts
from sqlalchemy import String,Column,Float,Text, engine
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base


# pro = ts.pro_api('1d18be2431d516faeef26b53b348ad1260b568026bbbd444c5e221e7')
Base = declarative_base()
class Stock_base(Base):
    #股票基本信息
    __tablename__ = "test_sb"
    ts_code = Column(String(10), primary_key=True)  # TS代码
    name = Column(String(10))           # 股票名称
    area = Column(String(4))            # 所在地域
    industry = Column(String(4))        # 所属行业
    fullname = Column(String(30))       # 股票全称
    market = Column(String(3))          # 市场类型 (主板/中小板/创业板)
    list_date = Column(String(8))       # 上市日期
    #更新所有股票基础信息
class Operate_data():
    def __init__(self):
        self.engine = create_engine('mysql://root:240240@127.0.0.1:3306/test?charset=utf8mb4')
        self.pro = ts.pro_api('1d18be2431d516faeef26b53b348ad1260b568026bbbd444c5e221e7')

    def get_end_dt(self):
        time_temp = datetime.datetime.now() - datetime.timedelta(days=1)
        end_dt = time_temp.strftime('%Y%m%d')  
        return end_dt

     #创建所有表
    def create_table(self):
        Base.metadata.create_all(self.engine)


    def Update_stock_base(self,engine,pro,retry_count,pause):
        
        def get_stock_base(pro,retry_count=4,pause=5):
            #获取股票基础信息   retry_count应该指循环次数,pause用来指睡眠的时间
            frame = pd.DataFrame()
            for _ in range(retry_count):
                try:
                    df = pro.stock_basic(**{"ts_code": "","name": "","exchange": "","market": "","is_hs": "","list_status": "L","limit": "","offset": ""},
                        fields=["ts_code","name","area","industry","market","list_date","fullname"])
                except:
                    time.sleep(pause)
                else:
                    frame = pd.concat([frame,df])
                    break
            # print(frame)
            frame.reset_index(drop=True,inplace=True)
            return frame
                #重置索引时,会将旧索引添加为列,drop指是否删除旧索引的列
                #inplace 是否修改数据
            

        data = get_stock_base(pro,retry_count,pause)
        data.to_sql('test_sb',engine,if_exists='replace',index=False)
        # print(data)
            # stock_base = pro.stock_basic(**{"ts_code": "","name": "","exchange": "","market": "","is_hs": "","list_status": "L","limit": "","offset": ""},
            #     fields=["ts_code","name","area","industry","market","list_date","fullname"])
                
            #     print(tscode)
        
    def updata_all(self,last_date):
        #定时执行

        #now 获取现在的时间
        # timedelta类是用来计算二个datetime对象的差值的.此类中包含如下属性: 
            # 1、days:天数 
            # 2、microseconds:微秒数(>=0 并且 <1秒) 
            # 3、seconds:秒数(>=0 并且 <1天)         
        time_temp = datetime.datetime.now() - datetime.timedelta(days=1)
        #strftime 将时间类型格式化为字符串输出
        end_dt = time_temp.strftime('%Y%m%d')
        #strptime 按照特定时间格式将字符串转换(解析)为时间类型元组
        time_temp = datetime.datetime.strptime(last_data,"%Y%m%d") + datetime.timedelta(days=1)
        start_dt = time_temp.strftime("%Y%m%d")
        if self.end_dt == end_dt:
            # self.create_table()
            self.Update_stock_base(self.engine,self.pro,4,5)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`vuex-persistedstate` 可以将 Vuex 的状态持久化到本地存储中,以便在应用程序重新加载时恢复状态。在使用 `vuex-persistedstate` 之前,需要先安装和配置它。 安装: ``` npm install vuex-persistedstate ``` 配置: ```javascript import createPersistedState from "vuex-persistedstate"; const store = new Vuex.Store({ // ... plugins: [ createPersistedState({ // 配置项 }) ] }); ``` 接下来,您可以使用 `createPersistedState` 的 `key` 选项来设置在本地存储中存储状态的键。 ```javascript const store = new Vuex.Store({ // ... plugins: [ createPersistedState({ key: "my-app" }) ] }); ``` 现在,您可以在 Vuex store 中使用 `localStorage` 存储状态。例如: ```javascript const store = new Vuex.Store({ // ... mutations: { increment(state) { state.count++; } }, plugins: [ createPersistedState({ key: "my-app" }) ] }); ``` 在上面的示例中,每当 `increment` mutation 在 store 中被调用时,`vuex-persistedstate` 将自动将新的 `state` 对象序列化并保存到 `localStorage` 中。 要从本地存储中检索状态,只需在创建 `Vuex` store 时将 `createPersistedState` 插件添加到 `plugins` 列表中即可。例如: ```javascript const store = new Vuex.Store({ // ... plugins: [ createPersistedState({ key: "my-app" }) ] }); // 在 store 创建后,初始状态将从本地存储中加载。 ``` 您可以通过传递 `getState` 函数来配置 `createPersistedState` 来自定义从本地存储中检索状态的行为。例如: ```javascript const store = new Vuex.Store({ // ... plugins: [ createPersistedState({ key: "my-app", getState: (key) => JSON.parse(localStorage.getItem(key)), }) ] }); ``` 在上面的示例中,`getState` 函数将从 `localStorage` 中检索状态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值