2012-02-13 12 views
1

このコードはDBに1行しか書いていませんこのコードはDBに1行しか書いていませんか?

このコードではエラーは見つかりませんでした。 。 。

しかし、なぜこれが最初の行以上を挿入していないのですか?

def transremovechars(): 
    cur.execute('drop table transforms') 
    char_cfg = config.get('Transform_Variables', 'Chars_to_be_removed')  #Reads all the special chars to be removed from specialchars.txt# 
    cur.execute('select * from originallist') 
    for row in cur:               #Applies transformation to remove chars for each row in a loop# 
     company = row[0] 
     for specialchars in char_cfg: 
      company = company.replace(specialchars, '') 
     cur.execute('Insert into transforms (Transresult1) values (\'' + company + '\')') 
    con.commit() 
+0

'results = cur.fetchall()'を追加し、カーソルではなく 'results'をループする必要があります。 –

+0

glglgl:いいです。それは私がいつもそれをやったことです。だから私はそれが行く道だと思った。しかし、大丈夫、私は今知っている、あなたはカーソルをループすることができます。 –

+0

glglgl:あなたのコメントを削除しましたか?カーソルの上を直接反復できますか? –

答えて

2

あなたはcur.fetchall()を忘れてしまった:

def transremovechars(): 
    cur.execute('drop table transforms') 
    char_cfg = config.get('Transform_Variables', 'Chars_to_be_removed')  #Reads all the special chars to be removed from specialchars.txt# 
    cur.execute('select * from originallist') 
    for row in cur.fetchall():               #Applies transformation to remove chars for each row in a loop# 
     company = row[0] 
     for specialchars in char_cfg: 
      company = company.replace(specialchars, '') 
     cur.execute('Insert into transforms (Transresult1) values (\'' + company + '\')') 
    con.commit() 
+0

cur.fetchall()はすべての行を出力しています! 6 times – Beginner

+0

「印刷する」とは「変換テーブルに行を挿入する」という意味ですか? – warvariuc

1

あなたはそれを使用する前に、あなたのテーブルtransformsをドロップするように見えます。あなたはそれをしてもよろしいですか?あるいは、もう一度それを作成するコードを表示することを忘れてしまったでしょうか?

select *は、第1列のみを使用すると過剰になることがあります。おそらく、そのフィールドの名前をSELECTにしたいと思うかもしれません。

以外にも、あなたがカーソルの上に

cur.execute('Insert into transforms (Transresult1) values (?)', company) 

反復処理を使用してINSERT行を置き換える必要がありますが、問題ないはずです。たぶん、あなたのforループにいくつかprintステートメントを挿入することができます...

1

cur.fetchall()とそれ以上の反復を行うべきであるとのコメントはうまくいくでしょう。あなたのコードの真の欠点は、一度curを挿入すると、それは「新しいもの」で、元のジェネレータはリセットされます(curはnext()です)。

fetchallを使わずにcurを使用することができます.2番目のカーソルins_cur = con.curson()を作成し、両方を使用します。もっと多くののエフェクトは、1つの接続で複数のカーソルを開いたり、複数のカーソルを開いたりすることで実現できます。

また、正しいdbapiモジュールのvariable bindingを使用してください。

関連する問題