1. 对象序列化
对象序列化就是将python中的对象保存为二进制的字节流文件,与之相对的是反序列化, 从二进制文件中读取内容,重新解析为python对象。通过序列化,只需要读取一次数据库,然后将生存的字典对象保存为一个文件,后续在使用时,直接读取序列化产生的文件,就可以快速得到数据库对应的字典。
在python中,通过内置模块pickle进行序列化相关操作,用法如下
import pickle
>>>
1:'A', 2:'B', 3:'C'} data = {
# 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
>>>
>>>
>>>
# 创建数据库
# 连接数据库
'test.db') conn = sqlite3.connect(
# 创建游标
c = conn.cursor()
'''CREATE TABLE alphabet (cnt integer, date text)''') c.execute(
<sqlite3.Cursor object at 0x7f3e514413b0>
>>>
for key, value in data.items():
'INSERT INTO alphabet VALUES (?, ?)', (key, value)) c.execute(
...
<sqlite3.Cursor object at 0x7f3e514413b0>
<sqlite3.Cursor object at 0x7f3e514413b0>
<sqlite3.Cursor object at 0x7f3e514413b0>
conn.commit()
conn.close()
# 使用数据库
'test.db') conn = sqlite3.connect(
c = conn.cursor()
for row in c.execute('SELECT * FROM alphabet WHERE cnt <= 2'):
print(row)
...
(1, 'A')
(2, 'B')
将数据存储在数据库中,称之为对象持久化,除了sqlite3之外,python也支持mysql等其他数据库,只需要安装对应的模块即可。
·end·
—如果喜欢,快分享给你的朋友们吧—
转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。
扫描下方二维码,关注我们,解锁更多精彩内容!
一个只分享干货的
生信公众号
本文分享自微信公众号 - 生信修炼手册(shengxinxiulian)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4580290/blog/4356986