我有一个非常大的数据库,我想将该数据库的一部分(1/1000)发送给我正在合作执行测试运行的人。我怎样才能(a)选择总行数的1/1000(或类似的东西)和(b)将选择保存为新的.db文件。
这是我目前的代码,但我被卡住了。
import sqlite3
import json
from pprint import pprint
conn = sqlite3.connect('C:/data/responses.db')
c = conn.cursor()
c.execute("SELECT * FROM responses;")
答案 0 :(得分:0)
创建另一个具有与原始db类似的表结构的数据库。从原始数据库中记录样本并插入新数据库
import sqlite3
conn = sqlite3.connect("responses.db")
sample_conn = sqlite3.connect("responses_sample.db")
c = conn.cursor()
c_sample = sample_conn.cursor()
rows = c.execute("select no, nm from responses")
sample_rows = [r for i, r in enumerate(rows) if i%10 == 0] # select 1/1000 rows
# create sample table with similar structure
c_sample.execute("create table responses(no int, nm varchar(100))")
for r in sample_rows:
c_sample.execute("insert into responses (no, nm) values ({}, '{}')".format(*r))
c_sample.close()
sample_conn.commit()
sample_conn.close()
答案 1 :(得分:0)
最简单的方法是:
复制文件系统中的数据库文件,就像复制任何其他文件一样(例如ctrl + c然后按ctrl + v在windows中制作responses-partial.db
或其他内容)
然后在sqlite编辑器(例如http://sqlitebrowser.org/)中打开此新副本,运行删除查询以删除您想要的多行。然后,您可能希望从文件菜单中运行压缩数据库。
关闭sqlite编辑器并确认文件大小较小
通过电子邮件发送
除非你需要创建一个可重复的系统,否则我不会在python中这样做。但是你可以在python中执行类似的步骤(复制文件,打开它运行删除查询等),如果你需要的话。
答案 2 :(得分:0)
最简单的方法是
删除第999个/第1000个数据,保留前几行:
DELETE FROM responses WHERE SomeID > 1000;
或者,如果你想要真正的随机样本:
DELETE FROM responses
WHERE rowid NOT IN (SELECT rowid
FROM responses
ORDER BY random()
LIMIT (SELECT count(*)/1000 FROM responses));
运行VACUUM以减小文件大小。