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

2024-05-17 23:00:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 文件代码fromimport数据库json内容db
3条回答

最简单的方法是

  1. 复制数据库文件
  2. 删除999/1000个数据,方法是保留前几行:

    DELETE FROM responses WHERE SomeID > 1000;
    

    或者,如果你想要真正的随机样本:

    ^{2美元
  3. 运行VACUUM以减小文件大小。

最简单的方法是:

  1. 复制文件系统中的数据库文件与复制任何其他文件相同(例如,在windows中,按ctrl+c,然后按ctrl+v生成responses-partial.db或其他文件)

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

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

  4. 通过电子邮件发送副本

除非您需要创建一个可重复的系统,否则我不会费心在python中执行此操作。但如果需要,可以在python中执行类似的步骤(复制文件,打开它并运行delete query等)。在

创建另一个表结构与原始数据库相似的数据库。从原始数据库中采样记录并插入新数据库

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()

相关问题 更多 >