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