2012-07-02 16 views
0

我有一個sqlite3數據庫有多個(六)表,我需要它被導入到csv,但是當我嘗試導入它時,如果一列(在表中)比另一個大在另一張桌子)。當使用python將sqlite3文件導出到csv時不會獲得重複值?

即:這是我的sqlite3的數據庫文件的樣子:

column on table1  column on table2 column on table3 
25     30     20 
30 

這是對.csv文件的結果(使用this腳本爲例)

25,30,20 
30,30,20 

,這是結果我需要它顯示:

25,30,20 
30 

編輯:好的,這是我如何將值添加到每個表,ba sed的在python documentation example上(每次執行的值項用來):

import sqlite3 
conn = sqlite3.connect('database.db') 

c = conn.cursor() 

# Create table 
c.execute('''CREATE TABLE table 
      (column int)''') 

# Insert a row of data 
c.execute("INSERT INTO table VALUES (value)") 

# Save (commit) the changes 
conn.commit() 

# We can also close the cursor if we are done with it 
c.close() 

任何幫助嗎?

-Regards ...

+3

您需要向我們展示您的查詢,以便我們能夠爲您提供幫助。 –

回答

1

這是如何做到這一點。

import sqlite3 

con = sqlite3.connect('database') 
cur = con.Cursor() 

cur.execute('select table1.column, table2.column, table3.column from table1, table2, table3') 
# result should look like ((25, 30, 20), (30,)), if I remember correctly 
results = cur.fetchall() 

output = '\n'.join(','.join(str(i) for i in line) for line in results) 

注意:這段代碼是未經測試的,寫在我的頭上,但我希望你明白了。


UPDATE:顯然我在腳本中犯了一些錯誤,不知何故SQL「神奇」墊的結果(您可能已經猜到了,現在,我不是一個SQL大師:d)。另一種方式來做到這一點是:

import sqlite3 
conn = sqlite3.connect('database.db') 

cur = conn.cursor() 

tables = ('table1', 'table2', 'table3') 
results = [list(cur.execute('select column from %s' % table)) for table in tables] 

def try_list(lst, i): 
    try: 
     return lst[i] 
    except IndexError: 
     return ('',) 

maxlen = max(len(i) for i in results) 
results2 = [[try_list(line, i) for line in results] for i in xrange(maxlen)] 

output = '\n'.join(','.join(str(i[0]) for i in line) for line in results2) 
print output 

產生

25,30,20 
30,, 

這可能是做一個過於複雜的方法,但它是0:30,現在對我來說,所以我不在我最好的...
至少它得到了預期的結果。

+0

它不起作用,得到了相同的結果,多虧了...... – Hairo

+0

你可以編輯你的問題與你使用插入查詢的值,你也可以給你用來從數據庫中獲取數據的查詢('從...選擇......)?現在,我首先懷疑輸入數據有問題,或者您使用的是過於複雜的腳本,將值放在不需要它們的地方。你可以放置一個更大的實際代碼摘錄嗎? – BrtH

+0

正如我在OP說的,我從這裏拿走它: http://stackoverflow.com/questions/4264379/it-is-possible-export-table-sqlite3-table-to-csv-or-similiar 也,我試圖在控制檯中的代碼和輸出的結果是相同的,我得到了與上述腳本 – Hairo