【问题标题】:IndexError: tuple index out of range python postgresqlIndexError:元组索引超出范围python postgresql
【发布时间】:2017-08-04 07:19:03
【问题描述】:
import psycopg2
import csv
#import operator
import pandas as pd
database = psycopg2.connect (database = "mydw", user="postgres",                         
password="1234", host="localhost", port="5432")
cursor = database.cursor()
a = pd.read_csv("test.csv")
b = pd.read_csv("test2.csv")
print ("Read file")
c = pd.concat([a, b], join='outer')
c.to_csv("sorted_data.csv", index=False)
mydata = cursor.execute(delete)
cursor.execute("""Create Table Real.region
        (Country varchar(55),
        Capital varchar(55),
        State varchar(55),
        City varchar(55),
        Zip varchar(55)
         );""")

for row in c:
   cursor.execute("""INSERT INTO Real.region (Country, Capital, State,         
    City, Zip)"""\
        """VALUES (%s,%s,%s,%s,%s)""",(row,))            
cursor.close()
database.commit()
database.close()

print("CSV 数据导入")

我正在尝试合并 2 个 CSV 文件并将生成的文件放入 数据库。但我面临错误------

文件“C:/Users/Administrator/join-col.py”,第 42 行,在
"""值 (%s,%s,%s,%s,%s)""",(行,))
IndexError: 元组索引超出范围

请帮忙

【问题讨论】:

  • 试试len(row) 知道row 中有多少项目。
  • """VALUES (%s,%s,%s,%s,%s)""", row) 怎么样,否则你只是传递一个值。

标签: python postgresql csv


【解决方案1】:

如果这样

a = pd.read_csv("test.csv")
b = pd.read_csv("test2.csv")
print ("Read file")
c = pd.concat([a, b], join='outer')

在 c 中放置一个元组列表(您可以通过打印它来验证它),那么您应该只需要更改它

cursor.execute("""INSERT INTO Real.region (Country, Capital, State,         
City, Zip)"""\
    """VALUES (%s,%s,%s,%s,%s)""",(row,))  

到这里

cursor.execute("""INSERT INTO Real.region (Country, Capital, State,         
City, Zip)"""\
    """VALUES (%s,%s,%s,%s,%s)""",row)   

问题是row 已经是一个元组。通过执行(row,),您正在创建一个只有一个元素 的tulpe,它本身就是row。 这也是您收到IndexError 的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2018-11-16
    相关资源
    最近更新 更多