用SQLite数据库存储和读取数据(附程序代码)
SQLite是一个轻量级的数据库系统,它将整个数据库存储在一个单独的磁盘文件中。SQLite不需要服务器,也不需要安装或配置,Python3中就自带了一个SQLite3模块。虽然SQLite轻量,但功能却不轻,SQLite支持大部分SQL语言的功能,对于中等规模的数据,性能比CSV文件和HDF5文件更好。
在下面的例子中,我们从AKShare数据源中获取浦发银行(代码:600000)从2020年1月1日到2022年12月31日的日频行情数据,然后演示如何用SQLite数据库存储这些数据,以及如何从SQLite数据库中读取数据。
本例需要事先从AKShare库获取数据,具体可参照《如何用AKShare获取金融数据》一节的内容。
- 导入需要的库
本例需要用到pandas、sqlite3和akshare这3个库
import pandas as pd
import sqlite3
import akshare as ak - 从AKShare中获取数据:
df = ak.stock_zh_a_hist(symbol=”600000″, period=”daily”, start_date=”20200101″, end_date=’20221231′, adjust=””) # 通过akshare接口获取数据
print(df) # 输出数据查看
上述代码中 ak.stock_zh_a_hist 是 AKShare 从东方财富网获取股票历史行情数据的函数,函数的参数:symbol=”600000″ 为股票代码,period=”daily”为获取日频数据,start_date 和 end_date 为数据的开始日期和结束日期,adjust=”” 为默认返回不复权的数据。关于接口函数的更多信息请参见AKShare官网(www.akshare.xyz)。
获得的数据为 DataFrame 格式,DataFrame是一个由行和列组成的二维结构的表格,与Excel中的电子表格类似。数据的输出结果如下:
可以看到数据表有日期、开盘、收盘、最高、最低、成交量、成交额、振幅、涨跌幅、涨跌额、换手率这几列数据,总共有728行,每一行为一个交易日的数据。 - 连接数据库,如果数据库不存在,则创建该数据库:
file_path = ‘d:temp/data.db’ # 设置数据库的路径和文件名
conn = sqlite3.connect(file_path) # 创建数据库连接
上述语句返回一个数据库对象conn,后面对数据库的读写操作都需要用到conn这个数据库对象。 - 用pandas的to_sql()函数将dataframe数据写入数据库:
df.to_sql(“600000”, conn, if_exists=’replace’, index=False)
简单解释下to_sql()函数的参数:
“600000” 表示将数据存入数据库中名为”600000″的表中,一个数据库中可以有多张表,分别存储不同的数据。比如我们可以为每只股票建立一张表,用来存储该股票的数据,所有这些表都在一个数据库中。
conn 为之前步骤建立的数据库连接对象。
if_exists 参数选 ‘replace’ 表示如果这张表中已经存在数据,则覆盖原有数据;如果你不想覆盖原有数据,而是采用追加的方式将数据写入表中,则需要将 if_exists 参数设置为 ‘append’,这在更新数据时很有用。
index 参数设置为 False 表示不用将DataFrame的索引写入数据库。 - 用pandas的read_sql()函数从数据库中读取数据到DataFrame
sql = “SELECT * FROM ‘600000’” # SQL查询语句,从’600000’表中选取所有内容
df = pd.read_sql(sql, conn)
print(df) # 输出数据查看
简单解释下read_sql()函数的参数:
sql 为 SQL查询语句,SQL 是用于访问和处理数据库的标准的计算机语言,支持SQLite、MySQL、SQL Server、Access、Oracle、Sybase、DB2 等等多种数据库。用SQL查询语句可以方便的实现数据插入、查询、更新、删除等操作。
conn 为之前步骤建立的数据库连接对象。 - 关闭数据库连接:
conn.close()
pandas通过to_sql()和read_sql()这两个函数,可以非常方便地实现对SQLite数据库的读写操作。
从上面的例子可以看到,使用SQLite数据库存取数据,其流程并不比使用CSV文件或HDF5文件复杂多少。但是,与文件存储相比,SQLite数据库可以实现更丰富的数据操作功能: - 在插入新数据时,能够处理原有数据已存在的情况。
- 支持SQL语句进行复杂查询和过滤。
- 可以对存储的数据进行更新和删除等操作。
因此SQLite是构建本地数据存储的一个不错的选择。
发布者:爱吃肉的小猫,转载请注明出处:https://www.95sca.cn/archives/46086
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!