使用python将sqlite3文件导出到csv时,不会获得重复值?

时间:2012-07-02 19:43:25

标签: python csv sqlite

我有一个sqlite3数据库,有多个(六个)表,我需要将它导入到csv,但是当我尝试导入它时,如果列(在表中)大于另一个,我会得到一个重复的值(在另一张表中)。

ie:这就是我的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

编辑:好的,这就是我根据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

1 个答案:

答案 0 :(得分: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,所以我不是最好的...... 至少它得到了理想的结果。