使用Python将CSV数据转换为postgreSQL

使用Python将CSV数据转换为postgreSQL,python,postgresql,csv,Python,Postgresql,Csv,我正在尝试使用Python将CSV数据导入postgreSQL。我试图在堆栈溢出上搜索此问题,但找不到任何适合我的情况的结果。我的CSV文件中有空列,当我运行代码时,它会为没有信息的空白列抛出一个错误。我希望能够告诉Python忽略空白列并继续到下一列。并不是所有的列都有数据,所以我需要您的帮助来实现一个解决方案,我可以在脚本中为没有数据的列编辑该解决方案。我是编程新手,请原谅我的愚蠢 import psycopg2 import csv csv_data = csv.reader(file(

我正在尝试使用Python将CSV数据导入postgreSQL。我试图在堆栈溢出上搜索此问题,但找不到任何适合我的情况的结果。我的CSV文件中有空列,当我运行代码时,它会为没有信息的空白列抛出一个错误。我希望能够告诉Python忽略空白列并继续到下一列。并不是所有的列都有数据,所以我需要您的帮助来实现一个解决方案,我可以在脚本中为没有数据的列编辑该解决方案。我是编程新手,请原谅我的愚蠢

import psycopg2
import csv

csv_data = csv.reader(file('SampleData1.csv'))

database = psycopg2.connect (database = "**", user="**", password="***", host="**", port="**")

cursor = database.cursor()
delete = """Drop table if exists "Real".SampleDataOne"""
print (delete)

mydata = cursor.execute(delete)

cursor.execute("""Create Table "Real".SampleDataOne
              (Username varchar(55),
              TimeStamp timestamp,
              Week date,
              Actual_Sale_Date date,
              Estimated_Closing_Date date, 
              Last_Name_First_Name varchar(55),
               Ages varchar(55)
               );""")

print "Table created successfully" 

next(csv_data)
for row in csv_data:

cursor.execute("""Insert into "Real".SampleDataOne(Username,TimeStamp,  Week,   Actual_Sale_Date, Estimated_Closing_Date, \
               Last_Name_First_Name,   Ages)"""\
               """VALUES (%s,%s,%s,%s,%s,%s,%s)""",
               row)

cursor.close()
database.commit()
database.close()

print "CSV imported"
错误如下:在“False”后面的列旁边有一个向上的点(^)

Drop table if exists "Real".SampleDataOne
Table created successfully

Traceback (most recent call last):
File "C:/Users/Desktop/Programming/SampleData1Python.py", line 61,   in <module>
row)
DataError: invalid input syntax for type date: ""
LINE 1: ...****@jcp.com','****@comcast.net','No','FALSE','','','')
如果存在“Real”,则删除表。SampleDataOne
已成功创建表
回溯(最近一次呼叫最后一次):
文件“C:/Users/Desktop/Programming/SampleData1Python.py”,第61行,在
(世界其他地区)
DataError:日期类型的输入语法无效:“”
第1行:…******@jcp.com'、******@comcast.net'、'No'、'FALSE'、''、''、'')


如果您有简单的csv数据,但数据中没有引号或逗号,则应该可以工作。

您没有在Psycopg2库中使用
copy\u to
,甚至没有在PostgreSQL中使用
copy
命令的原因是什么?它可能会解决您在这里的一些问题。我还没有听说复制功能。它能解决这个问题吗?错误信息非常有用…“”不是格式正确的日期。如果您的数据库允许在日期字段中输入空项,则您仍然需要发送None而不是“”。是的,我希望能够以None的形式发送空白(null),因为数据库中没有,但不知道如何发送。您需要将“”转换为None。我认为用你目前的语法是不可能的。您的数据库可能有一个聪明的预处理器选项,但我更愿意将字段从行提取到变量,如果行[5]!=''为日期字段,则使用datevar=row[5]否则没有格式。然后在数据库insert语句中使用这些变量。感谢您的回复,我在哪里可以在原始脚本中编辑此代码?用insert sql代替for循环。我经常使用
copy.*
,但值得注意的是,数据必须是完美的,包括类型和约束。没有错误恢复-第一个错误会停止进程。作为一种解决方法,我将加载到一个非类型化的临时表中(例如,包含所有varchar的表,没有约束),并对其进行后处理(仍然通过SQL,使用显式类型转换和强制转换)。
f = open('SampleData1.csv')
cursor.copy_from(f, '"Real".sampledataone', sep=',', null='')