2011-07-28 8 views
1

私のpythonスクリプトでは、インデックス9から始まるリスト(headerRow)を繰り返しています。すでにデータベースに入っているかどうかを確認したい場合は追加しますプライマリキーの自動入力を伴うデータベースへの接続私はそれを再度ループを介してそれを主キーを取得するために送信したいと思います。私の問題は、その範囲は、()iの既存の値が何であるかを気にしないで、増分用ループ内の変数を減らす

9 
New Question Added! 
8 
10 
New Question Added! 
9 
11 

は、あなたが見ることができるように:ここでは

for i in range (9, len(headerRow)): 
    # Attempt to retrieve an entry's corresponding primary key. 
    row = cursor.fetchone() 
    print i 

    if row == None: # New Entry 
     # Add entry to database 
     print "New Entry Added!" 
     i -= 1 # This was done so that it reiterates through and can get the PK next time. 
     print i 

    else: # Entry already exists 
     print "Existing Entry" 
     qpID = row[0] 
     # ... 

は私のスクリプトの出力です。私がやろうとしていることを行うためには、どのようなPythonの方法が好きですか?事前に

おかげで、

マイク

答えて

5

なぜwhileループを使わないのでしょうか?手動で変更するインデックス変数の

i=9 
while (i<len(headerRow)): 
    # Attempt to retrieve an entry's corresponding primary key. 
    row = cursor.fetchone() 

    if row == None: # New Entry 
     # Add entry to database 
     print "New Entry Added!" 
    else: # Entry already exists 
     print "Existing Entry" 
     qpID = row[0] 
     i += 1 
     # ... 
+0

これは機能し、シンプルです。私はそれが好きです。今、より良い質問はなぜforループを使用するのが私の頭の中に浸かったのかということです。ありがとう。 – MikeKusold

1

私の偉大な嫌悪感は、私はこれについてコメントしたくなる... :) どのようにちょうど同じ繰り返しで、両方のことを行うためにそれを変更することについてはどうですか? コードが少し奇妙に見えますが、あなたはそのアイデアを得ます。

for i in range (9, len(headerRow)): 
    # Attempt to retrieve an entry's corresponding primary key. 
    row = cursor.fetchone() 
    print i 

    if row == None: # New Entry 
     # Add entry to database 
     print "New Entry Added!" 
     row = cursor.fetchone() # re-fetch to get the PK 

    # Entry will exist now 
    print "Getting Existing Entry" 

    qpID = row[0] 
    # ... 

そしてデクリメント理由を説明しようとする「i」は動作しません:

ザ・ループをするために、実際に変数をインクリメントしません。これは、指定したシーケンスから次の値を選択するだけです(範囲関数によって生成されます)。したがって、secquenceが[9,10,11,12]の場合、順番にそれらを選択します。変数 "i"は次の値を取得し、前の値は破棄されます。インクリメントまたはデクリメントはこれに影響しません。

関連する問題