Python:如何将一系列数据插入数据库并全部显示

Python:如何将一系列数据插入数据库并全部显示,python,database,Python,Database,我尝试使用python和数据库来显示一系列信息。 但是,我的输出仅显示最后一列。 我知道我没有很清楚地表达我的意思。 因此,我将代码和输出放在下面: 现在输出显示: $ python pricewatch.py Harvey Norman Site Search iPad 2 Wi-Fi 16GB Black iPad 2 Wi-Fi 16GB iPad mini Wi-Fi + Cellular 32GB iPad mini Wi-Fi 16GB iPad mini Wi-Fi + Cell

我尝试使用python和数据库来显示一系列信息。 但是,我的输出仅显示最后一列。 我知道我没有很清楚地表达我的意思。 因此,我将代码和输出放在下面: 现在输出显示:

 $ python pricewatch.py
Harvey Norman Site Search
iPad 2 Wi-Fi 16GB Black
iPad 2 Wi-Fi 16GB
iPad mini Wi-Fi + Cellular 32GB
iPad mini Wi-Fi 16GB
iPad mini Wi-Fi + Cellular 64GB
iPad Wi-Fi 64GB with Retina Display
iPad Wi-Fi 32GB with Retina Display
iPad 2 Wi-Fi 16GB White
iPad 2 Wi-Fi + 3G 16GB
iPad Wi-Fi + Cellular 32GB with Retina Display
iPad mini Wi-Fi + Cellular 16GB
$357
$697
$756
$647
$395
$545
$777
$487
(8, u'iPad mini Wi-Fi + Cellular 16GB', u'Harvey Norman Site Search', u'$487')
//如你所见,它只显示最后一个 我的代码是

url="http://m.harveynorman.com.au/computers/tablets-readers/ipads"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

sitename=soup.find('label',{'for':'search'})
print sitename.renderContents()

productname=soup.findAll('strong',{'class':'name fn'})
for eachproductname in productname:

    print  eachproductname.renderContents()

productprice=soup.findAll('span',{'class':'price'})
for eachproductprice in productprice:

  print eachproductprice.renderContents().replace("<span>","").replace("</span>","")

conn =sqlite3.connect('pricewatch.db')
c = conn.cursor()

c.execute("CREATE TABLE if not exists table1 (id integer, name text, store text, price real)")
eachname = eachproductname.renderContents()
eachprice = eachproductprice.renderContents().replace("<span>","").replace("</span>","")
sitename = sitename.renderContents()
assignnumber = randint(1,30) #issue here,want to assign a series of number by the scriptself
data = [(assignnumber,eachname,sitename,eachprice),
        ]
c.executemany('INSERT INTO table1 VALUES (?,?,?,?)',data)

#output
for row in c.execute('select * from table1'):
       print row
现在,我想从数据库中得到的输出如下 1,ipadXX,HN,199美元 2,新罕布什尔州,ipad xx,200美元

希望任何人都能给我提示或编辑我的脚本

问候 余杭

执行后应调用fetchall:

您应该在执行后调用fetchall:


这没有什么错:

for row in c.execute('select * from table1'):
   print row
只需确保先提交插入:

c.executemany('INSERT INTO table1 VALUES (?,?,?,?)',data)
conn.commit()

然后,您仍然可以逐个提取记录,而不是像fetchall那样一次检索所有行。

以下操作没有问题:

for row in c.execute('select * from table1'):
   print row
只需确保先提交插入:

c.executemany('INSERT INTO table1 VALUES (?,?,?,?)',data)
conn.commit()

然后,您仍然可以逐个提取记录,而不是像fetchall那样一次检索所有行。

@jon Clements是对的,您的问题是:

data = [(assignnumber,eachname,sitename,eachprice),
    ]
这需要在一个循环中-现在它只被分配第一组值,这就是插入的全部内容

编辑

好吧,你想要这样的东西:

for (name, price) in zip(productname, productprice):
  name_data = name.renderContents()
  price_data = price.renderContents().replace() # fill in your replacements here
  site_data = sitename.renderContents()
  assign_number = random.randint(1,30)

  c.execute('insert into table1 values (?,?,?,?)', 
            (name_data, price_data, site_data, assign_name))

@乔恩·克莱门茨是对的,你的问题是:

data = [(assignnumber,eachname,sitename,eachprice),
    ]
这需要在一个循环中-现在它只被分配第一组值,这就是插入的全部内容

编辑

好吧,你想要这样的东西:

for (name, price) in zip(productname, productprice):
  name_data = name.renderContents()
  price_data = price.renderContents().replace() # fill in your replacements here
  site_data = sitename.renderContents()
  assign_number = random.randint(1,30)

  c.execute('insert into table1 values (?,?,?,?)', 
            (name_data, price_data, site_data, assign_name))

嗨,我之前也试过conn.commitb,它只是一次又一次地重复这个专栏。不工作,谢谢~嗨,我识别的数据是从网站上刮下来的,如上脚本所示。你说的数据不是我想的吗?~谢谢克里斯的回答。。。您只需将一行插入到database@JonClements:通过不格式化行来查看?:-@是的,显然都是我的错;嗨,我之前也试过conn.commitb,它只是一次又一次地重复这个专栏。不工作,谢谢~嗨,我识别的数据是从网站上刮下来的,如上脚本所示。你说的数据不是我想的吗?~谢谢克里斯的回答。。。您只需将一行插入到database@JonClements:通过不格式化行来查看?:-@是的,显然都是我的错;嗨,我累了,添加了一个循环,我用了一下。但是,我不确定在这种情况下如何循环。我累坏了循环行的次数,结果什么也没有显示;然后我尝试循环数据,结果显示syntaxerror。所以你能给我更多关于循环的细节提示吗?嗨,我累了,想添加一个循环,我用了一段时间。但是,我不确定在这种情况下如何循环。我累坏了循环行的次数,结果什么也没有显示;然后我尝试循环数据,结果显示syntaxerror。那么,你能给我更多关于循环的细节提示吗