2016-08-24 19 views
1

我对python非常陌生,这是我的第一个编程语言。这是我第一次使用SQL以及psycopg2。任何“愚蠢”的建议非常感谢!Psycopg2执行元组索引超出范围

我不确定是什么问题。我的研究告诉我,我只是给cursor.execute(INSERT...提供了太多或太多的论据,但我已经尝试了许多不同的计数,并且似乎无法正确工作。从我的角度来看,cursor.execute(CREATE...创建了一个有6列的表格,我正在向它传递6个参数。

from lxml import html # Used to parse XML 
import requests #used to service API request 

itemtypeid1 = 34 
itemtypeid2 = 35 
regionid = 10000002 

webpage = requests.get('http://api.eve-central.com/api/marketstat?typeid=%i&typeid=%i&regionlimit=%i' % (
itemtypeid1, itemtypeid2, regionid)) 

if webpage.status_code == 200: 
    data = html.fromstring(webpage.content) 
    for item in data.iter('type'): 


     buy_dict = {node.tag: node.text for node in item.xpath("buy/*")} 
     sell_dict = {node.tag: node.text for node in item.xpath("sell/*")} 

     #Variables for output 
     itemid = (item.get("id")) 
     buymin = buy_dict['min'] 
     buymax = buy_dict['max'] 
     buymedian = buy_dict['median'] 
     buyvolume = buy_dict['volume'] 
     buyaverage = buy_dict['avg'] 

#Fail if api webpage unavaliable 
else: 
     print "Webpage unavaliable" 
     Webpage.raise_for_status() 


############################################################################# 


import psycopg2 

connection = psycopg2.connect(database='evemarketdata', user='postgres', password='black3car') 

#open a cursor to perform DB operations 
cursor = connection.cursor() 

#create new table 
cursor.execute("CREATE TABLE arkonor (itemid integer primary key, min integer, max integer, median integer, volume integer, average integer);") 

#Insert row data into DB table 
cursor.execute("""INSERT INTO arkonor (typeid, min, max, median, volume, average) 
    VALUES (%s, %s, %s, %s, %s, %s, %s, %s)""", 
    ('itemid', 'buymin', 'buymax', 'buymedian', 'buyvolume', 'buyaverage')) 


#Commits all changes does with cursor 
#connection.commit() 

结果

Traceback (most recent call last): 

File "E:\Eve Spreadsheets\Python\PostgreConnect.py", line 49, in <module> 

('itemid', 'buymin', 'buymax', 'buymedian', 'buyvolume', 'buyaverage')) 

IndexError: tuple index out of range 
+0

只是经过并想提醒你:在“INSERT”的执行语句中,实际上是将6个字符串传递给查询。您需要传递变量的值(即不带引号) – Flickerlight

回答

1

您在查询8个参数,但在元组只提供了6场。代码应该是:

#Insert row data into DB table 
cursor.execute("""INSERT INTO arkonor (typeid, min, max, median, volume, average) 
    VALUES (%s, %s, %s, %s, %s, %s)""", 
    ('itemid', 'buymin', 'buymax', 'buymedian', 'buyvolume', 'buyaverage'))