1. #1

    Registered
    18/11/12
    Location
    ergens in Vlaanderen
    Posts
    14
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0

    Python - SQLite probleem

    gegeven:
    -een databank met een tabel met ongeveer een miljoen rijen, id is de sleutel
    -een algoritme om op basis van 5 variabelen een 6e variabele te berekenen

    gevraagd:
    -een manier om efficient alle rijen te updaten

    Een werkend programma is dit:
    Code:
    import sqlite3
    import berekenb
    
    teller=0
    conn = sqlite3.connect('bank2.db3')
    c = conn.cursor()
    
    for row in c.execute('select a1,a2,a3,a4,a5,id FROM awaarden'):
    	b1 = berekenb.berekenb(row[0],row[1],row[2],row[3],row[4]) 
    
    	for row2 in c.execute('update awaarden set b1= '+str(b1) where id=row[5]):
    		teller+=1
    conn.commit()
    conn.close()
    Het probleem is dat het update algoritme alle rijen overloopt om er 1 te updaten, er wordt dus een miljoen keer een miljoen rijen overlopen. Ik heb een beetje rondgezocht, maar ik heb geen manier gevonden om de row die ingelezen wordt rechtstreeks te updaten. Is dit mogelijk?

    Indien niet had ik gedacht aan een workaround, tabel awaardenbis creeren met dezelfde kolommen, voor elke rij uit awaarden alle waarden opslaan, b1 berekenen, alle waarden toevoegen aan de nieuwe tabel, als dat gebeurd is voor alle rijen de tabel awaarden droppen en tabel awaardenbis hernoemen naar awaarden, maar dat is uitaraard allesbehalve een elegante oplossing.
    no votes  

  2. #2
    Racemaniac's Avatar
    Registered
    27/07/02
    Location
    Merksem
    Posts
    3,397
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/3
    zoals alle databases: een index zetten op die id kolom? dan kan hij die veel efficienter updaten ipv de hele tabel te moeten scannen.
    Carmageddon 0wn4ge!!!!
    steun de virtuele perpetuum mobile part 1-10(dood ) part B --|-- Expert op gebied van Rode Blokskes
    all ph33r teh mighty strijksmiley --|-- zo herkent ge een echte TNG'er --|-- help ons de wereld te veroveren!
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in