2013-08-15 6 views
13

Obecnie używam MySQL i Pythona do skrobania danych z sieci. W szczególności zbieram dane tabeli i wstawiam je do mojej bazy danych. Moje obecne rozwiązanie działa, ale czuję, że jest ono wyjątkowo nieefektywne i najprawdopodobniej zablokuje moją bazę danych, jeśli nie przepisuję kodu. Oto, czego aktualnie używam (kod częściowy):Jak używać executemany do wstawienia do MySQL listy słowników w Pythonie

itemBank = [] 
for row in rows: 
    itemBank.append((tempRow2,tempRow1,tempRow3,tempRow4)) #append data 

#itemBank List of dictionaries representing data from each 
row of the table. i.e. 
('Item_Name':"Tomatoes",'Item_Price':"10",'Item_In_Stock':"10",'Item_Max':"30") 

for item in itemBank: 
    tempDict1 = item[0] 
    tempDict2 = item[1] 
    tempDict3 = item[2] 
    tempDict4 = item[3] 

    q = """ INSERT IGNORE INTO 
     TABLE1 
     (
      Item_Name, 
      Item_Price, 
      Item_In_Stock, 
      Item_Max, 
      Observation_Date 
     ) VALUES (
      "{0}", 
      "{1}", 
      "{2}", 
      "{3}", 
      "{4}" 
      ) 
     """.format(tempDict1['Item_Name'],tempDict2['Item_Price'],tempDict3['Item_In_Stock'], 
        tempDict4['Item_Max'],getTimeExtra) 

    try: 
     x.execute(q) 
     conn.commit() 
    except: 
     conn.rollback() 

Wykonywanie każdego wiersza tabeli jest uciążliwe. Próbowałem używać executemany, ale nie mogę znaleźć sposobu, aby poprawnie uzyskać dostęp do wartości słowników. Więc, jak mogę użyć executemany tutaj, aby wstawić do bazy danych ze względu na strukturę moich danych?

Odpowiedz

19
itemBank = [] 
for row in rows: 
    itemBank.append((
     tempRow2['Item_Name'], 
     tempRow1['Item_Price'], 
     tempRow3['Item_In_Stock'], 
     tempRow4['Item_Max'], 
     getTimeExtra 
     )) #append data 


q = """ insert ignore into TABLE1 (
     Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date) 
     values (%s,%s,%s,%s,%s)   
    """ 

try: 
    x.executemany(q, itemBank) 
    conn.commit() 
except: 
    conn.rollback() 

nadzieję, że pomoże Ci