2016-09-22 26 views
0

コンマ区切りの値をFruit Basketで解析し、他の列に移動するにはどうすればよいですか。私は、私は、Pythonを使ってそれを行うことができますどのように、純粋なSQLiteの文でこれを行うことができない場合例えばSQLite列の区切り値を複数の列に分割する方法

は、私が欲しいこの

Fruit Basket Fruit1 Fruit2 Fruit3 
------------ -------- -------- -------- 
Apple 
Banana, Pear 
Lemon, Peach, Apricot 

には、この

Fruit Basket Fruit1 Fruit2 Fruit3 
------------ -------- -------- -------- 
Apple   Apple 
Banana, Pear Banana Pear 
Lemon, Pea... Lemon  Peach  Apricot 

なり?

+0

「フルーツバスケット」列にカンマ区切り文字列がすでに格納されているとしますか?どのようにそこに着いたのですか? – Falmarri

+0

はい、この列にはすでにコマンド区切り文字列が格納されています。既存のデータベースにそのようになった。 –

+0

あなたはいつも1と3の果実の間で​​保証されますか?そうでない場合、私は円柱データベースがこれのための最善のアイデアであるとは確信していません –

答えて

0

manページをチェックしてください:

man sqlite3 | less +/-csv 

その後、出力が1列を引き離す

0

を解析するために、より簡単に終了されます

sqlite ... -csv | ... 

を使用するには、(Pythonのためにかなり単純なものですSQLiteについてはわかりません)。これは、あなたのDB行を文字列の配列に単純化し、SQLiteの戻り値に似ているはずです。

['Apple'] 
['Banana', 'Pear'] 
['Lemon', 'Peach', 'Apricot'] 

編集:

は、ここでは、SQLiteのに探しているものを行うには、完全なPythonスクリプトです:

text = [ 
    'Apple', 
    'Banana, Pear', 
    'Lemon, Peach, Apricot' 
] 

for line in text: 
    cols = [c.strip() for c in line.split(',')] 
    print(cols) 

は、出力は各文字列ラインの配列万一

import sqlite3 

conn = sqlite3.connect('test.db') 
c = conn.cursor() 
c.execute(
    '''SELECT * 
      FROM Fruits 
      WHERE Fruit_Basket IS NOT NULL''' 
) 
rows = c.fetchall() 
for row in rows: 
    fruit_basket = row[0] 
    fruits = [f.strip() for f in fruit_basket.split(',')] 
    while (len(fruits) < 3): 
     fruits.append('') 
    print(fruits) 
    update = '''UPDATE Fruits 
        SET Fruit1 = ?, Fruit2 = ?, Fruit3 = ? 
        WHERE Fruit_Basket = ?''' 
    c.execute(update, fruits + [fruit_basket,]) 
conn.commit() 
conn.close() 
+0

右...この文では、 'cursor.execute(" UPDATE table SET Fruit1 = function(FruitBasket、0)WHERE FruitBasket is NOT NULL; ")'疑似コード 'function(FruitBasket、0)フルーツ名の文字列をリストに分割し、インデックス0の最初の文字列を返します。これが可能だったら –

0

得点

def returnFruitName(string, index): 
    #Split string and remove white space 
    return [x.strip() for x in string.split(',')][index] 


cur.create_function("returnFruitName", 2, returnFruitName) 

cur.execute("UPDATE t SET Fruit1 = returnFruitName(FruitBasket,0) WHERE FruitBasket IS NOT NULL;") 
cur.execute("UPDATE t SET Fruit2 = returnFruitName(FruitBasket,1) WHERE FruitBasket IS NOT NULL;") 
cur.execute("UPDATE t SET Fruit3 = returnFruitName(FruitBasket,1) WHERE FruitBasket IS NOT NULL;") 
関連する問題