2016-10-11 5 views
0

私はPythonを使用してExcelをpostgreSQLにインポートしています。以下は私が問題を抱えている分野です。実際の販売価格は整数データ型の値でしたが、今ではこの列にはPythonスクリプトを壊しているN/A値が含まれています。このスクリプトに追加できるものはありますか?データ型をvarcharに変更せずにN/Aを持ち込むよう指示します。整数フィールドのN/A

import psycopg2 
import xlrd 
book = xlrd.open_workbook("T:\DataDump\8888.xlsx") 
sheet = book.sheet_by_name("ProjectConsolidated") 
database = psycopg2.connect (database = "***", user="****") 
cursor = database.cursor() 
delete = """drop table if exists "Python".ProjectConsolidated""" 
print (delete) 
mydata = cursor.execute(delete) 

cursor.execute('''CREATE TABLE "Python".ProjectConsolidated 
    (DCAD_Prop_ID VARCHAR(25), 
    Actual_Close_Date date, 
    Actual_Sales_Price integer, 
    );''') 
print "Table created successfully" 

query = """INSERT INTO "Python".ProjectConsolidated (DCAD_Prop_ID, 
    Actual_Close_Date, Actual_Sales_Price) 
VALUES (%s, %s, %s)""" 
for r in range(1, sheet.nrows): 
DCAD_Prop_ID = sheet.cell(r,0).value 
Actual_Close_Date = None if not sheet.cell(r,1).value else xlrd.xldate.xldate_as_datetime(sheet.cell(r,1).value,book.datemode) 
Actual_Sales_Price = None if not sheet.cell(r,2).value else sheet.cell(r,2).value 
values = (DCAD_Prop_ID, 
    Actual_Close_Date, Actual_Sales_Price) 
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 "I just imported Excel into postgreSQL" 
+0

Postgres DBでN/AをExcelからどのように表現したいのですか?空の文字列ですか?ヌル? 0? –

+1

データ型を変更せずにN/Aを値として持ち込むことはできますか? –

+0

スクリプトを投稿したり、問題をより完全に説明したりできますか? –

答えて

1
Actual_Sales_Price = None if not sheet.cell(r,61).value else sheet.cell(r,61).value 

try: 
    float(Actual_Sales_Price) 
except (ValueError, TypeError): 
    Actual_Sales_Price = None 

Pythonは(それは数ではないので、おそらく)フロートにあなたの実際の販売価格の変換に失敗した場合、我々はNullにASPを変更します。

DBドライバは、Python NoneをPostgresに変換する方法を知っている必要があります。

DB内で実際の販売価格をNullにしたいかどうかは、提供される限定情報から間違っているものの、あなた次第です。

+1

DanielleがTypeErrorを投げてくれてありがとう:TypeError:float()の引数は文字列または数字でなければなりません –

+0

私の悪い、私の答えを編集させてください –

+1

Danielleはうまくいきました。 –

関連する問題