0

複数(6)のテーブルがある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 に答える