如何在不将格式化为列表的情况下将sqlite导出到Python中的CSV?

Dan*_*Dan 19 python csv sqlite export-to-csv

这是我目前拥有的:

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()
Run Code Online (Sandbox Code Playgroud)

它创建一个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')
Run Code Online (Sandbox Code Playgroud)

我不希望行在括号中,也不希望在字符串之前有引号和'u'.如何在没有所有这些的情况下将行写入csv?谢谢,

Dou*_*gal 27

你现在正在做的是打印出一个元组的python字符串表示,即返回值str(row).这包括引号和'你和括号等等.

相反,您希望为CSV文件正确格式化数据.好吧,试试这个csv模块.它知道如何格式化CSV文件的东西,不足为奇.

with open('output.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerow(['Column 1', 'Column 2', ...])
    writer.writerows(data)
Run Code Online (Sandbox Code Playgroud)


Gop*_*h S 11

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

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)
Run Code Online (Sandbox Code Playgroud)

如果您需要表格分隔文件,请将 .csv 扩展名更改为 .tsv 并添加此 sep='\t'

  • 这是最好的答案。对于现代版本的 Pandas,最好使用 `read_sql`,这样你就不需要担心[较低级别的细节](/sf/ask/3372012801/ Between-pandas-read-sql -查询并读取sql表)。有关更多信息,请参阅[此处](https://mungingdata.com/sqlite/export-tables-queries-to-csv-parquet/)。 (3认同)

Hul*_*ell 7

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

>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
Run Code Online (Sandbox Code Playgroud)

上面的 sqlite3 命令将创建一个data.csv在您当前目录中调用的 csv 文件(当然这个文件可以命名为您选择的任何名称)。此处提供更多详细信息:http : //www.sqlitetutorial.net/sqlite-export-csv/