Python 动态处理csv中的数据列以导入Postgresql
我是python(3)的新手,很难找到如何处理以下场景的相关示例。我知道这是一个“什么是最好的”问题,但希望有一个明确合适的方法来解决这个问题 我有csv数据文件,其中包含时间戳,然后至少有一列数据具有主列表定义的名称(即,所有可能的列标题都是已知的)。例如: File1.csvPython 动态处理csv中的数据列以导入Postgresql,python,postgresql,csv,python-3.x,Python,Postgresql,Csv,Python 3.x,我是python(3)的新手,很难找到如何处理以下场景的相关示例。我知道这是一个“什么是最好的”问题,但希望有一个明确合适的方法来解决这个问题 我有csv数据文件,其中包含时间戳,然后至少有一列数据具有主列表定义的名称(即,所有可能的列标题都是已知的)。例如: File1.csv date-time, data a, data b 2014-01-01, 23, 22 2014-01-01, 23, 22d 文件2.csv date-time, data d, data a 2014-01-0
date-time, data a, data b
2014-01-01, 23, 22
2014-01-01, 23, 22d
文件2.csv
date-time, data d, data a
2014-01-01, 99, 20
2014-01-01, 100, 22
我一直在周而复始地试图理解何时使用元组、列表和字典将这种类型的场景导入postgresql。由于列顺序可以更改,并且列列表每次都不同(尽管总是从主数据集开始),因此我不确定如何最好地生成包含时间戳和列的数据集,然后在向未指定列提供值的postgresql表中执行插入
考虑到列的存在的动态性以及通过psycopg维护Postgresql导入的时间戳关系的需要,推荐什么?列表、列表列表、字典或元组
我不是在乞求具体的代码,只是一些指导。谢谢 您可以使用
csv
模块来解析输入文件,并在其第一行构建(准备)psycopg
插入具有列名和%s
而不是值的语句。对于其余行,只需使用行作为值执行此语句:
connect_string = 'dbname=test host=localhost port=5493 user=postgres password=postgres'
connection = psycopg2.connect(connect_string)
cursor = connection.cursor()
f = open(fn, 'rt')
try:
reader = csv.reader(f)
cols = []
for row in reader:
if not cols:
cols = row
psycopg_marks = ','.join(['%s' for s in cols])
insert_statement = "INSERT INTO xyz (%s) VALUES (%s)" % (','.join(cols), psycopg_marks)
print(insert_statement)
else:
print(row)
cursor.execute(insert_statement, row)
finally:
f.close()
...
对于您的示例,您必须更正列名。插入到一个postgresql表中时,所有未指定的列都为null,还是插入到不同的表中?一个未指定列的表为null。感谢您寻求澄清。查看
csv
模块,它将为您省去很多痛苦。