2011-12-31 71 views
0

我正在使用SQLAlchemy與聲明性基礎和Python 2.6.7插入到SQLite數據庫循環中的數據。Python將循環插入SQLite數據庫中的變量使用SQLAlchemy

作爲簡要背景,我已經實現了一種字典方法來在循環中創建一組變量。我所試圖做的是從一個網站湊了一些數據,並有條數據的1到12之間的下列元素:

overall_star_ratings = doc.findall("//div[@id='maincontent2']/div/table/tr[2]//td/img") 
count_stars = len(overall_star_ratings) 

在一個空的SQLite數據庫我有變量「t1_star,」 ... 「t12_star」,我想遍歷「overall_star_ratings」中的值列表並將值分配給數據庫變量,這取決於頁面。我正在使用SQLAlchemy,因此(以非常低效的語言),我期望做的是分配值並插入到數據庫中,如下所示(我正在循環代碼中的「行」,例如'row'命令插入值* t1_star *到數據庫中列「t1_star」等):

if count==2: 
    row.t1_star = overall_star_ratings[1].get('alt') 
    row.t2_star = overall_star_ratings[2].get('alt')   
elif count==1: 
    row.t1_star = overall_star_ratings[1].get('alt') 

這工作,但效率非常低,所以我實現了一個「字典」的方法來創建變量,因爲我在Stack Overflow的一些「變量」問題中見過。所以,這裏是我已經試過:

d = {} 
for x in range(1, count_stars+1): 
    count = x-1 
    d["t{0}_star".format(x)] = overall_star_ratings[count].get('alt') 

這適用於創建「t1_star」,「t2_star」鍵字典以及價值觀的問題是當我嘗試將數據插入。 ,數據庫我曾嘗試加入以下到上面的循環:

key = "t{0}_star".format(x) 
    value = d["t{0}_star".format(x)] 
    row.key = value 

我也嘗試添加以下上面的循環完成後:

for key, value in d.items(): 
    row.key = value 

的問題是,它不是inserti任何東西。看來問題出在row.key部分腳本中,而不是的值,但我不確定。從所有我可以看到,是相同的字符串,因爲我看到當我做到「低效」的方式(即,t1_star等),所以我不知道爲什麼這不起作用。

任何建議將不勝感激!

感謝,

格雷格

回答

3

Python的屬性訪問不起作用這樣的。 row.key查找文字名稱爲"key"的屬性,而不是變量key中的值。

您可能需要使用setattr

setattr(row, key, value) 
+0

這工作就像一個魅力!謝謝! – 2011-12-31 19:17:10

相關問題