Python使用SQLAlchemy将变量循环插入到SQLite数据库中

时间:2011-12-31 18:54:36

标签: python sqlite sqlalchemy

我正在使用带有声明性基础的SQLAlchemy和Python 2.6.7将数据循环插入到SQLite数据库中。

作为简要背景,我已经实现了一种字典方法来在循环中创建一组变量。我想要做的是从网站上抓取一些数据,并在以下元素中包含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,所以(在非常低效的语言中)我要做的是分配值并插入到DB中,如下所示(我在代码中循环''行',这样'行'命令将* 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

问题是它没有插入任何东西。问题似乎是脚本的 row.key 部分,而不是,但我不确定。从我所能看到的一切,与我所看到的相同的字符串是“低效”的方式(即t1_star等),所以我不知道为什么这不起作用。

任何建议都将不胜感激!

谢谢,

格雷格

1 个答案:

答案 0 :(得分:3)

Python属性访问并不像那样工作。 row.key使用文字名"key"查找属性,而不是变量key中的值。

您可能需要使用setattr

setattr(row, key, value)