博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python对数据库操作(以拉取股票入库为例)
阅读量:4210 次
发布时间:2019-05-26

本文共 2889 字,大约阅读时间需要 9 分钟。

获取股票数据的时候我们采用的是baostack。您需要安装baostack的python包,除此之外我们采用的数据库驱动为pymysql,orm框架采用sqlalchemy。这里不讲解具体的安装过程,网上资料很多。

1.pymysql进行简单的增删改查操作

import pymysql.cursors# 连接数据库connect = pymysql.Connect(    host='localhost',    port=3307,    user='root',    passwd='tianjingle',    db='pymysql',    charset='utf8')# 获取游标cursor = connect.cursor()# 插入数据sql = "INSERT INTO test (id, name, age) VALUES ( '%s', '%s', %.2f )"data = (7, 'zhangsan', 24)cursor.execute(sql % data)connect.commit()print('成功插入', cursor.rowcount, '条数据')# 修改数据sql = "UPDATE test SET name = '%s' WHERE id = %i "data = ('zhangsan', 1)cursor.execute(sql % data)connect.commit()print('成功修改', cursor.rowcount, '条数据')# 查询数据sql = "SELECT id,name,age FROM test WHERE id = '%i' "data = (1)cursor.execute(sql % data)for row in cursor.fetchall():    print(row)    # print("Name:%s\tSaving:%.2f" % row)print('共查找出', cursor.rowcount, '条数据')# 删除数据sql = "DELETE FROM test WHERE id = %i LIMIT %d"data = (2, 1)cursor.execute(sql % data)connect.commit()print('成功删除', cursor.rowcount, '条数据')# 事务处理sql_1 = "UPDATE test SET age = age + 1000 WHERE id = 1 "sql_2 = "UPDATE test SET age = age + 1000 WHERE id = 1 "sql_3 = "UPDATE test SET age = age + 2000 WHERE id = 1 "try:    cursor.execute(sql_1)  # 储蓄增加1000    cursor.execute(sql_2)  # 支出增加1000    cursor.execute(sql_3)  # 收入增加2000except Exception as e:    connect.rollback()  # 事务回滚    print('事务处理失败', e)else:    connect.commit()  # 事务提交    print('事务处理成功', cursor.rowcount)# 关闭连接cursor.close()connect.close()

2.使用sqlalchemy+baostack获取股票数据并保存到数据库中

import pandas as pdfrom sqlalchemy import create_engineimport baostock as bslg = bs.login()rs = bs.query_history_k_data_plus("sh.600567",    "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",    start_date='1999-07-01', end_date='2020-10-18',    frequency="d", adjustflag="3")#### 打印结果集 ####data_list = []while (rs.error_code == '0') & rs.next():    data_list.append(rs.get_row_data())result = pd.DataFrame(data_list, columns=rs.fields)##将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为utf8engine = create_engine('mysql+pymysql://root:tianjingle@localhost:3307/pymysql?charset=utf8')#插入数据库result.to_sql(name = 'sh600567',con = engine,if_exists = 'append',index = False,index_label = False)

3.使用pymysql读库并转成DataFrame

import pymysql.cursorsimport pandas as pd# 连接数据库connect = pymysql.Connect(    host='localhost',    port=3307,    user='root',    passwd='tianjingle',    db='pymysql',    charset='utf8')# 获取游标cursor = connect.cursor()# 查询数据sql = "SELECT * FROM sh600567 "data = (1)cursor.execute(sql)fs = cursor.descriptionfilelds=[]for field in fs:    filelds.append(field[0])rs=cursor.fetchall()data_list = []result = pd.DataFrame(list(rs),columns=filelds)print(result)# 关闭连接cursor.close()connect.close()

说明一下我为什么只是把orm框架当作存储作用的原因是:我喜欢写sql,使用orm框架的学习成本太大。为了避免数据返回的格式化不统一的问题可以使用第三小节转成DataFrame,这样就不存在这个问题了。

转载地址:http://rhkmi.baihongyu.com/

你可能感兴趣的文章
《redis in action》redis持久化简介
查看>>
Oracle RAC Failover 详解
查看>>
批处理 自动修改 IP 地址
查看>>
Oracle RAC LoadBalance
查看>>
v$sql,v$sqlarea,v$sqltext 和 v$sql_plan 说明
查看>>
ORA-31623 When Submitting a Datapump Job [ID 308388.1]
查看>>
Oracle SYSAUX 表空间 说明
查看>>
RAC 安装patch 后启动实例 报错 ORA-00439 feature not enabled- Real Application Clusters 解决方法
查看>>
On RAC, expdp Removes the Service Name [ID 1269319.1]
查看>>
Important Changes to Oracle Database Patch Sets Starting With 11.2.0.2 [ID 1189783.1]
查看>>
Oracle RAC 平台下 Patch 安装与卸载 步骤
查看>>
Oracle Database 11gR1 和 10gR2 ASM Best Practices 说明文档
查看>>
ASM Concepts Quick Overview [ID 1086199.1]
查看>>
PowerDesigner 业务处理模型( BPM ) 说明
查看>>
PowerDesigner 企业架构模型 ( EAM ) 说明
查看>>
PowerDesigner 正向工程 和 逆向工程 说明
查看>>
PowerDesigner 模型文档 说明
查看>>
PowerDesigner 系列 小结
查看>>
Oracle 升级10.2.0.5.4 OPatch 报错Patch 12419392 Optional component(s) missing 解决方法
查看>>
Oracle sessions,processes 和 transactions 参数 关系 说明
查看>>