0

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

即:这就是我的 sqlite3 数据库文件的样子:

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

这是 .csv 文件的结果(使用脚本作为示例)

25,30,20
30,30,20

这是我需要它显示的结果:

25,30,20
30

编辑:好的,这就是我将值添加到每个表的方式,基于python 文档示例(每次使用值条目时执行):

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()

有什么帮助吗?

-问候...

4

1 回答 1

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)

注意:这段代码未经测试,是我写出来的,但我希望你能明白。


更新:显然我在脚本中犯了一些错误,并且不知何故 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,所以我不是最好的......
至少它得到了预期的结果。

于 2012-07-02T19:51:38.123 回答