2016-10-02 49 views
0

錯誤使用psycopg2

#!/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()
Sample.csv 
 
VehicleNo,DepartureDate,DepartureCity,SeatNumber,UCI,PAXSurname,FirstName,PNRNumber,Ticket,FQTVNumber,PassportNo,PassportExpDate 
 
100,2010-11-25,ATB,,1087100000858D99,RAMAN,CHETTI,6WIL66,6034202799543,,KP4523,20201220 
 
230,2011-10-28,KLI,025G,001035477423095B,MEHMOOD,HIDDY,63IC4Y,6035448301629,,YL0152441,20190609 
 
270,2012-10-13,KWI,002K,20632703000E3281,ALMARRI,GALI,2UITWH,6039659907963,,K302216,20161020 
 
502,2015-12-03,ADB,026B,200235B3000C4633,HONGI,XYIUE,4S63HA,6035853329241,,DL0007453,20171020

我是新手,&我使用python 3.5我要插入一個CSV數據使用文件到PostgreSQL表插入CSV文件值到一個PostgreSQL時psycopg2。 (VAL1,VAL2,VAL3,VAL4,VAL2ES)中第23行的文件「E:\ Shared Folder Home \ Python \ Python3 \ postgressqlCSV.py」 val5,VAL6,val7,的Val8,val9,val10,VAl11難,val12)])NameError:名稱 'VAL1' 沒有定義

我得到上述錯誤,當我用下面

所示的蟒代碼可以有人幫我解決這個問題。我插入了我的CSV文件的樣本。非常感謝你的時間&努力。

回答

0

消息很明確。你沒有定義val1。將每行中的字符串列表變成一個元組。使用Psycopg2的execute方法參數傳遞。你不想要第一個標題行。

對於我,排在枚舉(讀者): 打印(我行) 如果我== 0:繼續

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

BTW雙引號引起標識符是一個壞主意。

+0

非常感謝,現在我收到一個錯誤說明; Traceback(最近調用最後一個): 文件「E:\ Shared Folder Home \ Python \ Python3 \ postgressqlCSV.py」,第25行,在 )值%s'',[元組(行)] psycopg2。編程錯誤:關係「data」不存在 LINE 2:INSERT INTO「data」( ^所以我插入了一條語句來創建「data」表如下; cur.execute('''DROP TABLE IF EXISTS data'' ') – Klllmmm

+0

cur.execute(' '' CREATE TABLE數據 (ID INT PRIMARY KEY NOT NULL, VehicleNo INT NOT NULL, DepartureDate CHAR(50), DepartureCity CHAR(50), SeatNumber CHAR(50), UCI CHAR(50), PAXSurname CHAR(50), 姓CHAR(50), PNRNumber CHAR(50), 票務INT, FQTVNumber CHAR(50), PassportNo CHAR(50), PassportExpDate CHAR(50) ); '' ') print(「Table data created successfully」) – Klllmmm

+0

錯誤消息是;表格數據已成功創建0 ['100','2010-11-25','ATB','','1087100000858D99','RAMAN','CHE TTI','6WIL66','60342 02799543',' '','KP4523,20201220'] 1 ['230','2011-10-28','KLI','025G','001035477423095B','MEHMOOD','HIDDY','63IC4Y',' 6035448301629','','Y L0152441','20190609'] Traceback(最近調用最後一個):文件「E:\ Shared Folder Home \ Python \ Python3 \ postgressqlCSV.py」,第49行,在 )值%s''',[元組(行)] psycopg2.ProgrammingError:關係「data」的列「VehicleNo」不存在LINE 3:「VehicleNo」,「DepartureDate」,「DepartureCity」... – Klllmmm