web-dev-qa-db-ja.com

リストとしてフォーマットせずにPythonでsqliteを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()

次のような出力を含む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に行を書き込むにはどうすればよいですか?ありがとう、

19
Dan

現在行っているのは、タプルのpython文字列表現、つまりstr(row)の戻り値を出力することです。これには、引用符と 'u'および括弧などが含まれます。オン。

代わりに、CSVファイル用に適切にフォーマットされたデータが必要です。 csv module を試してください。驚くことではないが、CSVファイルのフォーマット方法を知っている。

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

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/

2
Hula_Zell

ほんの数行で問題なく動作する私のバージョン。

    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'

1
Gopinath S