2016-10-11 16 views
0

Ich importiere Excel in PostgreSQL mit Python. Unten ist das Feld, mit dem ich Probleme habe. Der tatsächliche Verkaufspreis war ein ganzzahliger Datentyp, der für eine Weile, aber jetzt diese Spalte einen N/A-Wert enthält, der mein Python-Skript sprengt. Gibt es etwas, das ich diesem Skript hinzufügen kann, das es anweisen wird, N/A einzubringen, ohne den Datentyp in Varchar zu ändern.N/A im Integer-Feld

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

Wie möchten Sie eine N/A aus Excel in Ihrer Postgres DB darstellen? Leere Zeichenfolge? Null? 0? –

+1

Kann ich sowieso N/A als Wert einbringen ohne den Datentyp zu ändern? –

+0

Können Sie Ihr Skript posten oder das Problem anderweitig erklären? –

Antwort

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 

Wenn Python nicht Ihren tatsächlichen Verkaufspreis in einen Schwimmer konvertieren (vermutlich, weil es keine Zahl ist), ändern wir das ASP auf Null.

Ihr DB-Treiber sollte wissen, wie man einen Python None in Postgres übersetzt.

Ob Sie tatsächlich möchten, dass der tatsächliche Verkaufspreis Null in Ihrer DB ist, liegt bei Ihnen, obwohl es aus den begrenzten Informationen falsch klingt.

+1

Danke Danielle es wirft einen TypeError: TypeError: float() Argument muss eine Zeichenfolge oder eine Zahl –

+0

Hoppla, lass mich meine Antwort bearbeiten –

+1

Danke Danielle ausgearbeitet. –