2016-12-01 8 views
1

を引っ張って、私は非常に単純なタスクを達成しようとしている:SQLiteの のPython SQLite3の:希望繰り返し行をフェッチするが、コードは他のすべての行に

  • 挿入いくつかの行
  • でテーブルを作成します

    • をテーブル内の単一の列を照会し、各列タブ作成する

    コード引き戻す:

    import sqlite3 
    sqlite_file = '/Users/User/Desktop/DB.sqlite' 
    conn = sqlite3.connect(sqlite_file) 
    c = conn.cursor() 
    
    c.execute('''CREATE TABLE ListIDTable(ID numeric, Day numeric, Month 
    numeric, MonthTxt text, Year numeric, ListID text, Quantity text)''') 
    
    
    values_to_insert = [ 
    (1,16,7,"Jul",2015,"XXXXXXX1","Q2"), 
    (2,16,7,"Jul",2015,"XXXXXXX2","Q2"), 
    (3,14,7,"Jul",2015,"XXXXXXX3","Q1"), 
    (4,14,7,"Jul",2015,"XXXXXXX4","Q1")]  #Entries continue similarly 
    
    c.executemany("INSERT INTO ListIdTable (ID, Day, Month, MonthTxt, 
    Year, ListID, Quantity) values (?,?,?,?,?,?,?)", values_to_insert) 
    
    conn.commit() 
    conn.close() 
    

    SQLite DBブラウザでこのテーブルを見ると、すべてが正常に見えます。

    はここで、上記の表試してみて、照会に私のコードです:私は1、2、3、4 のプリントアウトを取得する必要があります

    import sqlite3 
    sqlite_file = '/Users/User/Desktop/DB.sqlite' 
    conn = sqlite3.connect(sqlite_file) 
    conn.row_factory = sqlite3.Row 
    c = conn.cursor() 
    
    for row in c.execute('select * from ListIDTable'): 
        r = c.fetchone() 
        ID = r['ID'] 
        print (ID) 
    

    をしかし、私は2を取得し、4

    私のコードは実際にテーブルに100のエントリをアップロードしますが、私が照会すると、私は偶数(つまり2,4,6,8など)のIDプリントアウトしか取得しません。

    これを修正するためのアドバイスありがとうございます。

  • 答えて

    2

    ループの中でfetchoneは必要ありません。ループは値を(1度に1つずつ)フェッチしています。 fetchoneを反復している間は、ループが1つをフェッチしてすぐに次のものをフェッチするため、半分のデータしか表示されません。

    for r in c.execute('select * from ListIDTable'): 
        ID = r['ID'] 
        print (ID) 
    
    関連する問題