Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 动态处理csv中的数据列以导入Postgresql_Python_Postgresql_Csv_Python 3.x - Fatal编程技术网

Python 动态处理csv中的数据列以导入Postgresql

Python 动态处理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

我是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-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
模块,它将为您省去很多痛苦。