如何使用python选择部分sqlite数据库

时间:2017-10-02 08:33:30

标签: python sqlite

我有一个非常大的数据库,我想将该数据库的一部分(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;")

3 个答案:

答案 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)

最简单的方法是:

  1. 复制文件系统中的数据库文件,就像复制任何其他文件一样(例如ctrl + c然后按ctrl + v在windows中制作responses-partial.db或其他内容)

  2. 然后在sqlite编辑器(例如http://sqlitebrowser.org/)中打开此新副本,运行删除查询以删除您想要的多行。然后,您可能希望从文件菜单中运行压缩数据库。

  3. 关闭sqlite编辑器并确认文件大小较小

  4. 通过电子邮件发送

  5. 除非你需要创建一个可重复的系统,否则我不会在python中这样做。但是你可以在python中执行类似的步骤(复制文件,打开它运行删除查询等),如果你需要的话。

答案 2 :(得分:0)

最简单的方法是

  1. 制作数据库文件的副本;
  2. 删除第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));
    
  3. 运行VACUUM以减小文件大小。