2016-10-31 10 views
1

私はPythonを使用してPostgreSQLにExcelデータをインポートしており、プログラミングエラーが発生しています。私はこの問題を研究し、postgreSQLと関係があることを発見しました。誰かが助けてください。ProgrammingError:タイプ 'set'を適合させることができません

import psycopg2 
import xlrd 

book = xlrd.open_workbook("T:\data.xlsx") 
sheet = book.sheet_by_name("HCSData") 
database = psycopg2.connect (database = "", user="") 

cursor = database.cursor() 
delete = """Drop table if exists "Python".hcsdata""" 
print (delete) 
mydata = cursor.execute(delete) 

cursor.execute('''CREATE TABLE "Python".hcsdata 
    (DCAD_Prop_ID varchar(55), 
    Address VARCHAR(50), 
    Addition   VARCHAR(100), 
    Block text, 
    Lot integer, 
    Permit_Num   varchar(55), 
    Permit_Date    date, 
    Foundation_Date date, 
    Frame_Date date, 
    Final_Date date, 
    HCS  varchar(55), 
    Project_ID integer 
    );''') 
print "Table created successfully" 

query = """INSERT INTO "Python".hcsdata (DCAD_Prop_ID,Address,Addition, Block, Lot, 
Permit_Num,Permit_Date, Foundation_Date, Frame_Date, Final_Date, HCS,Project_ID) 
VALUES (%s, %s, %s, %s, %s, %s, %s,%s, %s, %s, %s, %s)""" 

for r in range(1, sheet.nrows): 
    DCAD_Prop_ID = sheet.cell(r,0).value 
    Address = sheet.cell(r,1).value 
    Addition = sheet.cell(r,2).value 
    Block = sheet.cell(r,3).value 
    Lot = sheet.cell(r,4).value 
    Permit_Num = sheet.cell(r,5).value 
    Permit_Date = None if not sheet.cell(r,6).value else xlrd.xldate.xldate_as_datetime(sheet.cell(r,6).value,book.datemode) 
    Foundation_Date = None if not sheet.cell(r,7).value else xlrd.xldate.xldate_as_datetime(sheet.cell(r,7).value,book.datemode) 
    Frame_Date = None if not sheet.cell(r,8).value else xlrd.xldate.xldate_as_datetime(sheet.cell(r,8).value,book.datemode) 
    Final_Date = None if not sheet.cell(r,9).value else xlrd.xldate.xldate_as_datetime(sheet.cell(r,9).value,book.datemode) 
    HCS = sheet.cell(r,10).value 
    Project_ID =sheet.cell(r,11).value 

    values = (DCAD_Prop_ID,set(Address),Addition, Block, Lot, 
Permit_Num,Permit_Date, Foundation_Date, Frame_Date, Final_Date, HCS,Project_ID) 

    cursor.execute(query, values) 

cursor.close() 

database.commit() 

database.close() 

print "" 
print "All Done! Bye, for now." 
print "" 
columns = str(sheet.ncols) 
rows = str(sheet.nrows) 
print "Done" 

とエラーPythonは示しています

Drop table if exists "Python".hcsdata 
Table created successfully 

Traceback (most recent call last): 
    File "C:\Users\Programming\PythonSQLNew\HCSData.py", line 53, in <module> 
cursor.execute(query, values) 
ProgrammingError: can't adapt type 'set' 
+1

である(setAddressを入れる必要はありませんので、他の分野のような文字列をのようです)あなたは必ず 'set(Address)'のですか?統一性が必要な場合は、おそらく 'list(set(Address))'を実行するべきです。しかし、私はそれがちょうど 'Address'であるべきだと思う。 –

+0

ありがとうJean、エラーはアドレスにあると思いますか? –

+1

私は確信しています。何か他のものを渡すようにしてください。私はそれをやるだろう。 –

答えて

2

クエリは、すべての文字列を期待しているように見える:自分の価値観で

query = """INSERT INTO "Python".hcsdata (DCAD_Prop_ID,Address,Addition, Block, Lot, 
Permit_Num,Permit_Date, Foundation_Date, Frame_Date, Final_Date, HCS,Project_ID) 
VALUES (%s, %s, %s, %s, %s, %s, %s,%s, %s, %s, %s, %s)""" 

は、文字列はほとんど唯一の存在ですが、外国人は際立っています:

values = (DCAD_Prop_ID,set(Address),Addition, Block, Lot, 
Permit_Num,Permit_Date, Foundation_Date, Frame_Date, Final_Date, HCS,Project_ID) 

私は、メッセージが不可解である認めるが、ロジックはちょうど行うに教えてくれる:

values = (DCAD_Prop_ID,Address,Addition, Block, Lot, 
Permit_Num,Permit_Date, Foundation_Date, Frame_Date, Final_Date, HCS,Project_ID) 

関連する問題