如何在 Python 中将 sqlite 导出为 CSV 而无需格式化为列表?

问题描述 投票:0回答:4

这是我目前拥有的:

conn = sqlite3.connect(dbfile)
conn.text_factory = str ## my current (failed) attempt to resolve this
cur = conn.cursor()
data = cur.execute("SELECT * FROM mytable")

f = open('output.csv', 'w')
print >> f, "Column1, Column2, Column3, Etc."
for row in data:
  print >> f, row
f.close()

它创建一个 CSV 文件,输出如下所示:

Column1, Column2, Column3, Etc.
(1, u'2011-05-05 23:42:29',298776684,1448052234,463564768,-1130996322, None, u'2011-05-06 04:44:41')

我不希望行在括号中,也不希望在字符串之前有引号或“u”。如果没有所有这些,我如何让它将行写入 csv?谢谢,

python sqlite csv export-to-csv
4个回答
32
投票

你目前正在做的是打印出元组的 python 字符串表示,即

str(row)
的返回值。这包括引号和 'u's 和括号等等。

相反,您希望为 CSV 文件正确格式化数据。好吧,试试

csv
模块。毫不奇怪,它知道如何为 CSV 文件设置格式。

with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['Column 1', 'Column 2', ...])
    writer.writerows(data)

newline=''
显然需要正确转义引用字段内的换行符。


20
投票

我的版本只需几行就可以正常工作。

import pandas as pd

conn = sqlite3.connect(db_file, isolation_level=None,
                       detect_types=sqlite3.PARSE_COLNAMES)
db_df = pd.read_sql_query("SELECT * FROM error_log", conn)
db_df.to_csv('database.csv', index=False)

如果您想要表格分隔文件,请将 .csv 扩展名更改为 .tsv 并添加此

sep='\t'


11
投票

将 sqlite 数据库表转换为 csv 文件也可以直接使用 sqlite3 工具完成:

>sqlite3 c:/sqlite/chinook.db
sqlite> .headers on
sqlite> .mode csv
sqlite> .output data.csv
sqlite> SELECT customerid,
   ...>        firstname,
   ...>        lastname,
   ...>        company
   ...>   FROM customers;
sqlite> .quit

上面的 sqlite3 命令将在您当前的目录中创建一个名为

data.csv
的 csv 文件(当然这个文件可以根据您的选择命名)。此处提供更多详细信息:http://www.sqlitetutorial.net/sqlite-export-csv/


0
投票

如果只有一张桌子的话,我用了一个愚蠢但更简单的!

首先我将数据库转换为 Pandas DataFrame

conn = sqlite3.connect(database file)
df = pd.read_sql_query("select * from TABLE", conn)

然后将df转换为CSV文件

df.to_csv(r'...\test_file.csv')

所以一个 CSV 文件正在以 test_file.CSV 的名称创建

© www.soinside.com 2019 - 2024. All rights reserved.