使用psycopg2从csv文件动态创建表格

3

我希望能够理解一个问题,这个问题我之前认为已经很清楚了。是否有任何方法可以使用psycopg2或任何其他Python Postgres数据库适配器创建表格,使其名称与.csv文件对应,并且(可能最重要的是)具有在.csv文件中指定的列。


是的,Python是一种通用编程语言,可以让您完成这个任务。 - monkut
1个回答

1

我会让你好好看看psycopg2库——这是我脑海中的想法(虽然我已经有一段时间没用它了,但我记得文档很充足)。

步骤如下:

  • 从CSV文件中读取列名
  • 创建"CREATE TABLE whatever" ( ... )
  • 可能插入数据

    import os.path my_csv_file = '/home/somewhere/file.csv' table_name = os.path.splitext(os.path.split(my_csv_file)[1])[0] cols = next(csv.reader(open(my_csv_file)))

你可以从这里开始...

创建一个SQL查询(可能使用模板引擎来处理字段),然后如果需要,发出插入命令。


我一定会尝试您的解决方案,但是让我问一下如何为每个列声明类型,我基本上只期望有两种不同列之间的文件类型。是否可以将每个列的类型存储在字典中,然后根据文件类型将该字典传递给创建表语句。我很确定这不可能使用字典类型,但您能否提供可能的实现。感谢快速回复。 - user1470764
你可以有一个字典,例如 {'file1.csv': 1, 'file2.csv': 2, 'file3.csv': 1},将文件名映射到你的两种文件格式之一。然后再有另一个字典,例如 {(1, 'name'): 'text', (1, 'gender'): 'char(1)', (2, 'age'): 'integer'}... 这个字典包含一个文件类型和列名的二元组,映射到列类型。这是你所询问的吗? - Jon Clements
是的,这正是我所问的,但我怀疑 psycopg2 CREATE TABLE 语句是否会接受这些类型的参数?我将尝试一下,希望稍后能提供代码。再次感谢。 - user1470764
他们不会接受字典,但你可以使用它们来构建有效的SQL查询字符串。 - Jon Clements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接