使用Python通过API提取基金净值信息并保存到SQLite数据库

基金API数据接口,股票API数据接口 一、基金API接口 天天基金实时信息:http://fundgz.1234567.com.cn/js/161725.js?rt=1463558676006 161725为基金代号!!! 返回值: jsonpgz({"fundcode":"161725","name":"招商中证白酒指数(LOF)A","jzrq":"2021-12-21","dwjz":"1.3768","gsz":"1.3797","gszzl":"0.21","gztime":"2021-12-22 15:00"}); 阅读详情

之前写了一篇保存到Excel版的,但毕竟随着数据量的增大,Excel不是长久之计,所以研究了一下SQLite数据库,SQLite有个好处,不用另外安装程序,Python自带,而且是单文件,方便拷贝转移。

和保存到Excel的主要区别是,可以先将爬取到的数据保存在Python的二维列表中,然后一次性写入SQLite数据库,Python的二维列表的数据容量非常巨大,就是从内存安全性来说,不是很严谨。

以下是代码:

# -*- coding: utf-8 -*-
"""
根据FundList.xls文件中的基金列表,从小熊同学网站API读取基金净值信息,写入到
SQLite数据库中

@author: RockyCoder
"""

'''
第一部分:引用
'''
import xlrd
import sqlite3
import requests
import json

'''
第二部分:函数
'''
# 将长度不定的列表,按照指定长度切割为子列表后,整合成嵌套列表。

def LineList(SrcList,LineLen):
    # 新列表,供返回
    NewList=[]
    # 记录源列表长度
    SrcLen=len(SrcList)

    # 判断是否需要分行
    if SrcLen<LineLen:
        return SrcList
    else:
        # 若需要分行,计算行数和剩余个数
        LineCnt=int(SrcLen/LineLen)
        LeftLen=SrcLen%LineLen
        # 在行数范围内,通过列表切片方式,获取指定长度的子列表
        for i in range(LineCnt):
            Lines=SrcList[(i*LineLen):(i*LineLen+LineLen):1]
            # 拼接到返回列表中
            NewList.append(Lines)
        # 如果剩余个数大于0,则将剩余部分通过切片方式,以子列表形式拼接到返回列表
        if LeftLen>0:
            NewList.append(SrcList[SrcLen-LeftLen:])

        return NewList

# 将指定的列表转换为以逗号分隔的字符串

def CSVString(SrcList):
    TempString=''
    
    for i in range(len(SrcList)):
        if type(SrcList[i]) is int:
            TempString=TempString+str(SrcList[i])+','
        elif type(SrcList[i]) is str:
            TempString=TempString+SrcList[i]+','
        else:
            print(type(SrcList[i]))
            
    return TempString[:-1]

'''
第三部分:操作
'''
# 打开基金原始表格
rdBook=xlrd.open_workbook('FundList.xls',formatting_info=True)
rdSheet=rdBook.sheet_by_name('Sheet1')

# 准备数据库
conn=sqlite3.connect('Fund.db')
c=conn.cursor()

# 初始化基础变量
url="https://api.doctorxiong.club/v1/fund?code="
SQLList=[]
TempList=[]
# 读取完整基金列表
fundCnt=int(rdSheet.cell_value(0,2))
FundList=[]
for j in range(2,fundCnt+1):
    FundCode=str(int(rdSheet.cell_value(j,1)))
    if len(FundCode)>0:
        FundList.append('0'*(6-len(FundCode))+FundCode)
    else:
        print("基金代码不得为空")
        exit(0)
# 按照20个一组,形成子列表
Lines=[]
Lines=LineList(FundList,20)

for l in Lines:
    # 根据逐个子列表,形成URL
    FinalURL=url+CSVString(l)
    strHTML=requests.get(FinalURL)
    contents=json.loads(strHTML.text)
    for k in contents["data"]:
        # 将有用字段写成一行
        TempList.extend((k['code'],k['name'],k['netWorth'],k['dayGrowth'],k['lastWeekGrowth'],k['lastMonthGrowth'],k['lastThreeMonthsGrowth'],k['lastSixMonthsGrowth'],k['lastYearGrowth'],k['netWorthDate']))
        # 将每一行集合成一个二维表
        SQLList.append(TempList)
        TempList=[]
    # 检查当前净值是否已写入过数据库
    
    # 将净值列表写入数据库
    c.executemany("INSERT INTO 产品库 (基金代码,基金名称,单位净值,日涨幅,周涨幅,月涨幅,季涨幅,半年涨幅,年涨幅,更新日期) VALUES (?,?,?,?,?,?,?,?,?,?)", SQLList)
    conn.commit()

conn.close()

SQLite相关数据表的结构

为了避免重复导入,在数据库层面做了一个多字段联合的约束,这个约束必须在创建数据表的SQL语句中体现,代码如下:

CREATE TABLE 产品库 (
    ID   INTEGER  PRIMARY KEY AUTOINCREMENT,
    基金代码 CHAR (6),
    基金名称 CHAR,
    单位净值 DECIMAL,
    日涨幅  DECIMAL,
    周涨幅  DECIMAL,
    月涨幅  DECIMAL,
    季涨幅  DECIMAL,
    半年涨幅 DECIMAL,
    年涨幅  DECIMAL,
    更新日期 DATE,
    UNIQUE (
        基金代码,
        更新日期
    )
    ON CONFLICT REPLACE
);

 

Python如何解决sqlite3.DatabaseError: database disk image is malformed SQLite SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is an embedded SQL database engine. Unlike most other SQL databases, SQLite does not have a seprate server p.. 阅读详情

相关推荐

使用Python操作数据库和使用SQLite创建数据库

程序运行的时候,数据都是在内存中的。 数据库都提供了标准化接口(API) 定义了Python数据库API接口的各个部分,若模块接口,连接对象,游标对象,类型对象和构造器,DB API的可选扩展以及可选的错误处理机制。 连接对象 数据库连接对象主要提供获取数据库游标对象和提交/回滚事务的方法,以及关闭数据库连接。 使用connect()函数获取连接对象 ...

m0_46965984的博客 3806

如何通过API获取分级基金数据?

在金融领域,分级基金是一种结构化金融产品,它将基金资产分成两个或多个不同风险和收益特征的部分,以满足不同投资者的需求。对于投资者和分析师来说,获取分级基金的数据是至关重要的,因为它可以帮助他们做出更明智的投资决策。通过API获取分级基金数据是一个高效且灵活的方法,它可以帮助投资者和分析师快速获取所需的金融数据。记住,数据的质量和准确性对于投资成功至关重要,因此选择一个可靠的数据提供商和API服务是至关重要的。在这个响应中,你可以获取到基金的基本信息,以及优先级和次级份额的收益率和风险评级。

云策量化的博客 1121

SQLite 与 Python:集成与使用

SQLite 是一个C库,它提供了一个轻量级的、无服务器的、零配置的、事务性的SQL数据库引擎。由于其自给自足的特性,SQLite 数据库是存储在单一文件中的,这使得它非常适合用于移动应用、小型项目以及作为学习数据库的基础。Python 是一种解释型、高级和通用的编程语言。它的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进来区分代码块,而不是使用大括号或关键字)。Python 支持多种编程范式,包括面向对象、指令式、功能性和过程式编程。

lsx202406的博客 1082

开放式基金净值估算数据 API 数据接口

开放式基金净值估算数据 API 数据接口全量基金数据,实时数据,所有基金数据。

DevOpenClub 专栏 3354

Python实现天天基金数据爬取

获取全量基金信息(基金代码、基金名、类型...) 获取基金指定日期内单位净值、累计净值、日增长率等 获取基金指定日期内单位净值、累计净值、日增长率等

宝塔部署若依前端出现502解决方法

若依系统是一个基于Java语言的开源项目,旨在帮助开发者减少开发时间,特别适用于需要快速开发出一套具有用户管理、菜单管理、权限管理、定时任务、日志管理等功能的简单系统。系统分为前后端分离、分布式等架构前后端分离部署教程然而通过宝塔来部署若依系统会遇见一些问题,特此在这里记录一下。

m0_74823683的博客 776

基金单位累计净值 api数据接口

基金单位累计净值 查询基金单位累计净值 购买次数包 接口说明 更新时间:2022-09-14 01:25:28接口状态:正常 计费模式 每日免费 每次消耗 每日限制 每次间隔 会员按量计费 10次 20点(0.02元) 30000次 0秒 请求地址 (https://)http://www.maitanbang.com/apis/mtbfunda/ 调试报错 请求方法 GET与POST 请求参数

up2021的博客 497

inferCNVpy实战指南:从安装到肿瘤细胞识别

本文提供inferCNVpy实战指南,详细介绍了从环境安装、数据准备到核心CNV推断分析的完整流程。重点讲解了如何利用该工具从单细胞转录组数据中识别肿瘤细胞,包括参考细胞选择、参数调优、结果可视化与解读,并分享了关键的避坑技巧,帮助用户高效完成肿瘤细胞识别。

weixin_29079643的博客 428

最新的同花顺,同方财富,通达信,开盘拉股票api接口大全

股票量化分析数据接口分享 本文分享了四个实用的股票量化分析数据接口:1)行业板块个股列表接口,提供特定板块的个股数据;2)ETF代码接口,获取所有ETF基础信息;3)股票增量数据接口,包含当日交易详细数据;4)基金净值历史数据接口。每个接口都包含完整参数说明、请求示例和返回值格式,为量化分析提供可靠的数据支持。这些接口返回JSON格式数据,包含股票代码、价格、成交量、涨跌幅等关键指标,适合用于搭建量化交易系统。

u014496893的博客 1万+

SAP MM采购合同创建全解析:ME31K操作与后台逻辑

在SAP ERP的物料管理模块中,采购合同作为框架协议的核心,定义了企业与供应商之间的长期供货关系。它与采购订单不同,合同不直接产生收货或发票,而是为后续采购订单提供数据源。创建合同(事务码ME31K)时,需要区分数量合同与金额合同,并维护抬头、行项目、有效期、价格条件和税码等关键信息。SAP通过源确定机制在创建采购订单时自动匹配合同,同时审批策略、编码范围和输出类型也会影响合同的实际可用性。掌握合同创建逻辑,能有效解决采购订单无法带出合同、审批未触发、价格缺失等高频问题。从ME31K实操出发,系统梳理采购

weixin_30000735的博客 196

华为交换机实战:如何用ACL+流分类精准限制特定IP的网速(附完整命令)

本文详细介绍了华为交换机如何通过ACL+流分类技术实现精准IP限速,包括ACL规则配置、流分类关联、流行为定义及流策略应用等完整步骤。文章提供了实战命令和配置验证方法,帮助网络管理员有效管理带宽资源,解决特定IP占用过多带宽的问题。

weixin_29229055的博客 100

Python 数据库编程(Python 的DB-API)

从哪里可以找到数据库相关的接口呢?很简单,只需要前往Python 官网的数据库主题部分即可。在那里,你可以找到全面的当前版本DB-API(2.0 版本)的链接,包括数据库模块、文档、特殊兴趣小组等。从一开始起,DB-API 就被移动至PEP 249 中(PEP 248 中的老版DB-API 1.0 标准已经废弃)。那么,DB-API 是什么呢?DB-API 是阐明一系列所需对象和数据库访问机制的标准,它可以为不同的数据库适配器和底层数据库系统提供一致性的访问。

钢铁男儿 1183

“风色幻想XX:交错轨迹游戏卡顿:从解决d3dx9_xx.dll缺失开始——风色幻想XX优化指南

《风色幻想XX:交错轨迹》作为一款深受玩家喜爱的角色扮演游戏,以其丰富的剧情、独特的角色设定和精美的画面赢得了广泛的赞誉。然而,在游戏过程中,部分玩家可能会遇到游戏卡顿的问题,这不仅影响了游戏体验,还可能让玩家错失精彩的剧情和战斗瞬间。在众多导致游戏卡顿的因素中,d3dx9_xx.dll文件的缺失往往是一个不容忽视的原因。

czl922的博客 1258

如何用Flask和Python构建Web API调用C++开发的DLL库文件并保存计算结果到Sqlite数据库

这篇博客介绍了如何使用 Flask 构建一个简单的 Web API,调用本地 DLL 文件进行计算,并将结果保存到 SQLite 数据库中。博客详细讲解了环境搭建、Flask 路由处理、与 DLL 的交互、结果存储及查询的全过程。此外,还解决了常见的 Python 编码问题,确保跨平台兼容性。适合有一定 Python 基础的开发者,特别是对 Web 开发、外部库调用和数据库操作有兴趣的读者。

dotnet研习社 1475

分布式系统中的“无状态”和“有状态”详解

有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如 tomcat 中的 session。例如登录:用户登录后,我们把登录者的信息保存在服务端 session 中,并且给用户一个 cookie 值,记录对应的 session。然后下次请求,用户携带 cookie 值来,我们就能识别到对应 session,从而找到用户的信息。

AI天才研究院 2万+

基于3D相机的人体穴位识别与标注系统——完整Python实现方案

摘要 本文提出了一种基于3D相机的人体穴位识别与标注系统完整实现方案。系统采用Intel RealSense D435相机实时采集RGB-D数据,结合MediaPipe Pose模型进行人体33个关键骨骼点的三维姿态估计。通过建立穴位与骨骼关键点的映射关系,利用相机内参和深度信息将二维图像坐标转换为三维空间坐标。系统采用模块化设计,包含数据采集层、算法处理层、坐标转换层和可视化层,实现了穴位定位、三维坐标转换和点云可视化功能。关键技术包括:基于骨度折量法的穴位映射算法、深度图像到三维点云的转换方法,以及Op

AI的内部世界的博客 272

数据库__DB-API、SQLite

2019.5.26:(6.4更新~~) 学习内容:DB-API、了解SQLite(如何选择一个合适的数据库) DB-API:     官方文档:https://www.python.org/dev/peps/pep-0249/       重点看:   (thx:https://www.jb51.net/article/104820.htm)   大多数Pyth...

weixin_30257433的博客 322

YOLO26中的PPM空间金字塔池化:改良设计与多尺度特征提取教程

在计算机视觉的语义分割任务中,准确理解图像中的上下文信息至关重要。例如,在街景图像中,可能同时存在远处的小汽车和近处的大建筑物,网络需要具备捕获多尺度上下文信息的能力。例如,要正确识别图像中的"船",不仅需要看到船本身的特征,还需要理解周围的水面环境。金字塔的每一层对应不同的池化尺度,从细粒度到粗粒度,形成了多层次的特征表示。PPM(Pyramid Pooling Module)正是为了解决这一问题而提出的模块,它通过构建金字塔形状的池化结构,有效地聚合不同尺度的上下文信息,从而提升语义分割的精度。

LXY_LOVE36的博客 82

python sqlite和mysql_python怎么与mysql、sqlite数据库通信——适配器:DB-API

1 数据库类型文件或简单的持久化存储:可以满足一些小应用的需求;数据库系统:适用于大型服务器或高数据容量的应用;混合类型:包括现有系统上的API、ORM、文件管理器、电子表格、配置文件等。2 数据库和Python访问数据库包括:DB-API,即直接通过数据库接口访问;使用ORM 访问,它不需要显式给出SQL 命令,但也能完成相同的任务。应用与数据库的多层通信。第一个框一般是C/C++程序,而在Py...

weixin_34709138的博客 531

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​

SQLite 仅支持一个原生数据类型的有限集。要在 SQLite 数据库中存储自定义 Python 类型,请将它们适配到SQLite 原生可识别的 Python 类型之一。有两种方式可将 Python 对象适配到 SQLite 类型:让你的对象自行适配,或是使用适配器可调用对象。后者将优先于前者发挥作用。对于导出自定义类型的库,启用该类型的自行适配可能更为合理。而作为一名应用程序开发者,通过注册自定义适配器函数进行直接控制可能更为合理。编写适配器使你可以将from。

C'mon的博客 826

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SQLite导入基金净值引出的多字段UNIQUE唯一性约束需求

在使用Python从小熊同学的API中提取基金净值后,导入到SQLite数据库时,考虑到避免重复导入同一天的同一只基金的净值信息。 如果使用Python在前期进行判断,就要损失非常多的效率,所以考虑在数据库端采取措施,因此需要有一个UNIQUE唯一性约束。 但该数据库中的所有字段都会存在重复值,如何实现唯一性约束呢?最好是基金代码+更新日期两个字段形成一个组合。 经过查看菜鸟教程,多字段的唯一性约束需要在建表的时候就在代码中指定。因此代码如下: CREATE TABLE 产品库 ( ID

996

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PySQLite:SQLite3的原始DB-API 2.0模块

PySQLite:SQLite3的原始DB-API 2.0模块 项目介绍 PySQLite 是 SQLite3 的原始 DB-API 2.0 模块,由 Gerhard Häring 在 2004 年至 2006 年间开发。该模块在 2006 年随着 Python 2.5 的发布被整合到 Python 标准库中,并作为 sqlite3 模块提供。尽管如此,PySQLite 仍然在一段时间内通过此仓库...

gitblog_00194的博客 906

使用Python实现数据库与数据仓库

1.背景介绍 1. 背景介绍 数据库和数据仓库是现代计算机科学中的核心概念,它们在处理和存储数据方面发挥着重要作用。数据库是一种结构化的数据存储系统,用于存储和管理数据。数据仓库则是一种用于分析和报告的数据存储系统,用于存储和处理大量的历史数据。 Python是一种流行的编程语言,它具有简洁的语法和强大的功能。在数据库和数据仓库领域,Python具有广泛的应用,可以用于数据库的开发、管理和操...

AI天才研究院 861

Python连接SQLite数据库

&#13; &#13; &#13; &#13; Python连接SQLite数据库&#13; &#13; &#13; &#13; &#13; &#13; SQLite数据库更多...

nostrud ipsum6 4082

python读取db文件_Python读取SQLite文件数据

近日在做项目时,意外听说有一种SQLite的数据库,相比自己之前使用的SQL Service甚是轻便,在对数据完整性、并发性要求不高的场景下可以尝试!1、SQLite简介:SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它(如安卓系统),它占用资源非常的低,在嵌入式设备中,可能只需要几百...

weixin_39851279的博客 2489

sqlite3- SQLite数据库的DB-API 2.0接口

sqlite3- SQLite数据库的DB-API 2.0接口 SQLite是一个C库,它提供了一个基于磁盘的轻量级数据库,它不需要单独的服务器进程,并允许使用SQL查询语言的非标准变体访问数据库。某些应用程序可以使用SQLite进行内部数据存储。也可以使用SQLite对应用程序进行原型设计,然后将代码移植到更大的数据库,如PostgreSQL或Oracle。 pysqlite由GerhardHä...

刨食的兔子 2160
上一篇: 一段从API读取基金净值信息并写入Excel表的Python代码
下一篇: 升级笔记本硬件并安装Debian的过程
RockyCoder
博客等级 码龄20年 56粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RockyCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值