在python中生成列表并将其存储在mysql数据库中的问题

时间:2012-01-31 13:23:54

标签: python mysql

  

可能重复:
  convert list to string to insert into my sql in one row in python scrapy

我编写了一个脚本来将数据插入到mysql中,如下所示,但它将items列表中的一个项目插入到mysql数据库中344次。我做错了什么?

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    sites = hxs.select('//ul/li')
    con = MySQLdb.connect(
                    host="localhost",
                    user="dreamriks",
                    passwd="dreamriks",
                    db="scraped_data"
                 )
    cur = con.cursor()
    items = []
    for site in sites:
        items = [site.select('//h2').extract()]
        item = [site.select('//h3').extract()]
        meta = [site.select('//meta').extract()]
    for index in range (len( items)):
        str = items[index]
        cur.execute("""Insert into h2_meta(h2) Values(%s)""",(str))

2 个答案:

答案 0 :(得分:3)

看起来你正在覆盖你的列表,而不是在你这样做时附加到它们:

for site in sites:
    items = [site.select('//h2').extract()]
    item = [site.select('//h3').extract()]
    meta = [site.select('//meta').extract()]

我想你可能想把它改成:

for site in sites:
    items.append(site.select('//h2').extract())
    item.append(site.select('//h3').extract())
    meta.append(site.select('//meta').extract())

答案 1 :(得分:1)

site.select('//h2').extract()

将返回该特定网站中所有“h2”标记的列表。附加此列表后,您需要遍历“项目”列表中的每个元素,因为它们都包含列表。 第二次迭代应该是这样的。

for elem in range( len( items )):
    for index in range( len(elem) ):
        str = elem[index]
        cur.execute("""Insert into h2_meta(h2) Values (%s)""",(str))

同时避免使用'str'之类的关键字作为变量名,并在追加每个列表之前声明它们。