使用psycopg2将CSV文件值插入postgreSQL时出错

时间:2016-10-02 13:53:03

标签: postgresql csv psycopg2 python-3.5

[1,2,3]
#!/usr/bin/python3.5


import psycopg2, csv

#create a connection object
conn = psycopg2.connect("dbname='testdb' user='postgres' host='localhost' password='password'")

#use cursor object to execute commands 
cur= conn.cursor()

reader = csv.reader(open('E:\\data\\sample.csv', 'r'))

for row in reader:
    print (row[1])
    
    cur.execute('INSERT INTO "data" ("VehicleNo", "DepartureDate", "DepartureCity", "SeatNumber", "UCI", "PAXSurname", "FirstName", "PNRNumber", "Ticket", "FQTVNumber", "PassportNo", "PassportExpDate")' +
                'VALUES %s', [(val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12)])
    
    conn.commit()
    cur.close()

我是新手,&我正在使用python 3.5我想使用psycopg2将CSV文件中的数据插入到PostgreSQL表中。

回溯(最近一次调用最后一次):文件“E:\ Shared Folder Home \ Python \ Python3 \ postgressqlCSV.py”,第23行,在'VALUES%s'中,[(val1,val2,val3,val4,val5) ,val6,val7,val8,val9,val10,val11,val12)])NameError:名称'val1'未定义

当我使用下面显示的python代码时,我遇到了上述错误

有人可以帮我解决这个问题。我已经插入了我的CSV文件样本。非常感谢你的时间和努力。

1 个答案:

答案 0 :(得分:0)

信息很清楚。您没有定义val1。将每行中的字符串列表转换为元组。使用Psycopg2的execute方法参数传递。您不希望第一个标题行。

表示i,列枚举(读者):     打印(i,行)     如果我== 0:继续

cursor.execute('''
    INSERT INTO data (
        VehicleNo, DepartureDate, DepartureCity, SeatNumber, UCI,
        PAXSurname, FirstName, PNRNumber, Ticket, FQTVNumber,
        PassportNo, PassportExpDate
    ) values %s''', [tuple(row)]
)

BTW双引号标识符是一个坏主意。