ProgrammingError:不能修改types'set'

我正在使用Python将Excel数据导入到PostgreSQL中,并运行到编程错误中。 我研究了这个问题,发现它与postgreSQL有关。 有人可以提供帮助吗?

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' 

您的查询似乎期望所有string:

 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)""" 

在你的价值观中,几乎只有string,但外星人脱颖而出:

 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) 

(因为没有必要把Address放在一个set ,它似乎是一个像其他字段的string)