python查询数据如何每次只查询100条_python海量数据快速查询的技巧

欢迎关注”生信修炼手册”!

在实际工作中,经常会遇到查询的任务,比如根据某些rs号,检索dbsnp数据库,提取这些snp位点的信息,对于这样的任务,最基本的操作方法是将数据库的内容存为字典,然后检索特定的key即可。

对于小文件而言,这样的操作编码简单,运行速度也比较满意,但是对于大型数据库而言,将数据库存为字典这个动作是非常耗费时间的,而且每次运行代码都要执行这样的操作,导致效率大大降低。想要改善这一状况,有以下两种解决办法

1. 对象序列化

对象序列化就是将python中的对象保存为二进制的字节流文件,与之相对的是反序列化, 从二进制文件中读取内容,重新解析为python对象。通过序列化,只需要读取一次数据库,然后将生存的字典对象保存为一个文件,后续在使用时,直接读取序列化产生的文件,就可以快速得到数据库对应的字典。

在python中,通过内置模块pickle进行序列化相关操作,用法如下

>>>import pickle>>>>>>data = {1:'A', 2:'B', 3:'C'}# dump 进行序列化>>>with open('out', 'wb') as f:... pickle.dump(data, f)...>>># load 进行反序列化>>>with open('out', 'rb') as f:... data = pickle.load(f)...>>>data{1: 'A', 2: 'B', 3: 'C'}

2. 使用数据库

对于数据检索这种任务,在工业界有成熟的解决方案——专用的数据库软件,比如耳熟能详的mysql等关系型数据库,以及redis等非关系型数据库。在python3中,内置了模块sqlite3, 支持创建sqlite3数据库,一个轻量级,文本型的数据库。用法如下

>>>import sqlite3>>>>>>>>># 创建数据库# 连接数据库>>>conn = sqlite3.connect('test.db')# 创建游标>>>c = conn.cursor()>>>c.execute('''CREATE TABLE alphabet (cnt integer, date text)''')>>>>>>for key, value in data.items():... c.execute('INSERT INTO alphabet VALUES (?, ?)', (key, value))...>>>conn.commit()>>>conn.close()# 使用数据库>>>conn = sqlite3.connect('test.db')>>>c = conn.cursor()>>>for row in c.execute('SELECT * FROM alphabet WHERE cnt <= 2'):... print(row)...(1, 'A')(2, 'B')

将数据存储在数据库中,称之为对象持久化,除了sqlite3之外,python也支持mysql等其他数据库,只需要安装对应的模块即可。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

更多精彩

写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

一个只分享干货的

生信公众号

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值