2016-04-22 17 views
0

私は、SQLite dbファイルとして保持されている素敵なテーブル形式で印刷したいという情報のデータベースを持っています。PythonでSQLiteデータベースのテーブルを印刷するにはどうすればよいですか?

など、私は異なるエンティティの属性を合わせない、紛らわしい方法で印刷に情報を見ているだけでprint文、ノー列ヘッダテーブルを作成し

手順:

def create_table(): 
c.execute('CREATE TABLE IF NOT EXISTS orders (' #CREATES TABLE named 'orders': 
      'name TEXT, '        #name 
      'type_ TEXT, '       #type of product 
      'location STRING, '      #location of product 
      'amount INTEGER, '      #'weight' of item, g, kg, ml, cl, l, etc. 
      'wholesale_cost REAL, '     #wholesale cost 
      'tax REAL, '        #tax % 
      'sale_pre_tax REAL, '      #sale value before tax 
      'sale_post_tax REAL, '     #sale value after tax 
      'quantity REAL, '       #how many sold 
      'total_sale_pre_tax REAL, '    #total sales before tax 
      'total_sale_post_tax, '     #total sales after tax 
      'total_tax REAL, '      #total tax in GBP 
      'total_wholesale_cost REAL, '    #total wholesale cos 
      'profit REAL)')       #total sale profit 

そして、これは、印刷手順です:

def read_from_db(): 
c.execute ('SELECT * FROM orders ') 
for row in c.fetchall(): 
    print(row) 

私はこれを実行すると、それは出力します。

('NORI', 'DRY', 'SHELVES', '50G', 3.4, 20.0, 4.42, 5.303999999999999, 3.0, 13.26, 15.911999999999999, 2.6519999999999992, 10.2, 3.0600000000000005)

('CURRY SAUCE', 'DRY', 'SHELVES', '500G', 5.65, 25.0, 7.345000000000001, 9.18125, 1.0, 7.345000000000001, 9.18125, 1.8362499999999997, 5.65, 1.6950000000000003)

('SALMON', 'CHILLED', 'FRIDGE', '100G', 1.25, 20.0, 1.625, 1.95, 3.0, 4.875, 5.85, 0.9749999999999996, 3.75, 1.125)

('EDAMAME', 'CHILLED', 'FRIDGE', '100G', 3.0, 19.0, 4.0, 5.0, 3.0, 12.0, 15, 3.0, 9.0, 3.0)

私のデータベースからの情報ですが、代わりにこれを表として印刷する方法はありますか?

+1

[mcve]を表示できますか? – Francesco

答えて

0

row_factoryを使用して、あなたの行に列名を追加すると、well documented次のとおりです。

import sqlite3 

con = sqlite3.Connection('my.db') 
con.row_factory = sqlite3.Row 

cur = con.cursor() 
cur.execute('SELECT * FROM tbl') 

for row in cur.fetchall(): 
    # can convert to dict if you want: 
    print(dict(row)) 

あなたは、テーブルを印刷するstr.rjustと関連する関数を使用するか、または「ファイル」としてsys.stdoutcsv.DictWriterを使用することができます。

import csv 
import sys 

wtr = csv.DictWriter(sys.stdout, fieldnames=[i[0] for i in cur.description]) 
wtr.writeheader() 

for row in cur.fetchall(): 
    wtr.writerow(dict(row)) 
+0

これを私のコードに追加し、それにエラーが表示されました。 ValueError:辞書更新シーケンス要素#0の長さが6です。 2が必要です。 dict()を削除すると、以前と同じように印刷されます。 –

+0

これは私のために働いています(Python 3.4.4)。私はそれが上記のコードでは誤りだとは思わない。エラーはどの行ですか?あなたは辞書ではないオブジェクトでどこかの辞書を更新しているようです。 [この質問](http://stackoverflow.com/questions/14302248/dictionary-update-sequence-element-0-has-length-3-2-is-required)を参照してください。 – ChrisP

関連する問題