【问题标题】:Sqlite3 / python - Export from sqlite to csv text file does not exceed 20kSqlite3/python - 从 sqlite 导出到 csv 文本文件不超过 20k
【发布时间】:2013-07-09 19:21:51
【问题描述】:

我正在尝试将 sqlite 表导出到文本文件,我在这个站点上找到了一些很大的帮助。它适用于较小的输出,但一旦我达到 20k 左右,它似乎会限制输出。

第一次尝试是:

Mark Bells UniCodeWriter 见于 It is possible export table sqlite3 table to csv or similiar?

我的表格有 15 列,我在这里只列出了 5 列,以便于阅读

writer = UnicodeWriter(open("Export8.csv", "wb"))

writer.writerow(["RunID","JobNumber","StartTime","EndTime","Period"])

writer.writerows(results)

第二次尝试是:

response = cursor.execute("SELECT RunID, JobNumber, StartTime, EndTime, strftime('%s',substr(endtime,1,19)) - strftime('%s',substr(starttime,1,19)) FROM tblTest WHERE RunID <>0")

strfile = open('_output1.csv','wb')

for row in response:
    print >> strfile,row

第三次尝试是:

strfile = open('_output3.csv','wb')

while True:

    row = cursor.fetchone()

    if row == None:

        break
    print >> strfile,row
    enter code here

第四次尝试/测试:

response = cursor.execute("SELECT RunID, JobNumber, StartTime, EndTime, Period FROM tblTest WHERE RunID <>0")

print response

结果

在尝试 1 中: 我得到了 183 条完整记录的输出和 184 条记录的第一列

在尝试 2 和 3 中: 我得到了 181 条完整记录的输出和 182 的一些列

在尝试 4 中: 我的所有数据都显示在屏幕上

当我检查 sqlite 数据库时,我看到 205 条记录。我知道我一次只能输出 100 行,但我想知道为什么我没有输出所有行

【问题讨论】:

  • 我使用 WinPython 和 spyder 进行了编程。现在我直接在Python27的IDLE中运行,输出是正确的。

标签: python python-2.7 sqlite


【解决方案1】:

您可以尝试使用pandas 加载 sql 数据,然后将其转储到 csv 中。您必须安装依赖项(尤其是 NumPy)才能使用它。那真的很简单:

import sqlite3
import pandas.io.sql as sql
con = sqlite3.connect('database.db')
table = sql.read_frame('select * from some_table', con)
table.to_csv('output.csv')

【讨论】:

  • Python 总是让我吃惊,这是一种非常干净的导出方式。谢谢
  • 这对我不起作用,我认为 pandas 模块已更改。但是,仅导入 pandas 并使用 pandas.read_sql('select * from some_table', con) 会得到正确的结果。
【解决方案2】:

您是否尝试过将光标本身用作writerows 的参数?

cursor.execute("select * from test")

csv_path = "out.csv"
with open(csv_path, "wb") as csv_file:
    csv_writer = csv.writer(csv_file)
    # Write headers.
    csv_writer.writerow([i[0] for i in cursor.description])
    # Write data.
    csv_writer.writerows(cursor)

【讨论】:

    【解决方案3】:

    我正在使用 3.4 和 sqlite3。我设法在不使用熊猫的情况下编写数据

    c = cur.execute("select * from HChange")
    
    with open('c:/tmp/bse/Output.csv','w', newline='') as file:
        for i in c:
            a=c.fetchone()
            csv.writer(file).writerow(a)
    

    【讨论】:

      猜你喜欢
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 2015-02-06
      • 2020-09-16
      相关资源
      最近更新 更多