使用 psycopg2 从 csv 文件创建 Postgresql table
Create Postgresql table from csv file using psycopg2
您好,我正在寻找可以让我从 csv 文件创建 table 的解决方案。我在另一个论坛上找到解决方案。此代码如下所示:
import csv
import psycopg2
import os
import glob
conn = psycopg2.connect("host= localhost port=5433 dbname=testDB user= postgres password= ************")
print("Connecting to Database")
cur = conn.cursor()
csvPath = "W:\Maciej.Olech\structure_files"
# Loop through each CSV
for filename in glob.glob(csvPath+"*.csv"):
# Create a table name
tablename = filename.replace("W:\Maciej.Olech\structure_files", "").replace(".csv", "")
print(tablename)
# Open file
fileInput = open(filename, "r")
# Extract first line of file
firstLine = fileInput.readline().strip()
# Split columns into an array [...]
columns = firstLine.split(",")
# Build SQL code to drop table if exists and create table
sqlQueryCreate = 'DROP TABLE IF EXISTS '+ tablename + ";\n"
sqlQueryCreate += 'CREATE TABLE'+ tablename + "("
#some loop or function according to your requiremennt
# Define columns for table
for column in columns:
sqlQueryCreate += column + " VARCHAR(64),\n"
sqlQueryCreate = sqlQueryCreate[:-2]
sqlQueryCreate += ");"
cur.execute(sqlQueryCreate)
conn.commit()
cur.close()
我尝试 运行 此代码,但出现此错误:
C:\Users\MACIEJ~1.OLE\AppData\Local\Temp/ipykernel_5320/1273240169.py in <module>
40 sqlQueryCreate += ");"
41
---> 42 cur.execute(sqlQueryCreate)
43 conn.commit()
44 cur.close()
NameError: name 'sqlQueryCreate' is not defined
我不明白为什么会出现此错误,因为定义了 sqlQueryCreate。
任何人都知道出了什么问题?感谢您的帮助。
您的代码存在一些问题。
- 在 Windows 中,路径需要转义
\
。
- 你的
cur.execute(sqlQueryCreate)
和conn.commit()
缩进错了。 sqlQueryCreate = sqlQueryCreate[:-2]
同上
和 sqlQueryCreate += ");"
- 编辑:意识到您的 glob.glob() 参数不正确。你想要的:
W:\Jan.Bree\structure_files\*.csv
,你实际拥有的W:\Jan.Bree\structure_files*.csv
import csv
import psycopg2
import os
import glob
conn = psycopg2.connect("host= localhost port=5433 dbname=testDB user= postgres password= ************")
print("Connecting to Database")
cur = conn.cursor()
csvPath = "W:\Jan.Bree\structure_files"
# Loop through each CSV
for filename in glob.glob(os.path.join(csvPath,"*.csv")):
# Create a table name
tablename = filename.replace("W:\Jan.Bree\structure_files", "").replace(".csv", "")
print(tablename)
# Open file
fileInput = open(filename, "r")
# Extract first line of file
firstLine = fileInput.readline().strip()
# Split columns into an array [...]
columns = firstLine.split(",")
# Build SQL code to drop table if exists and create table
sqlQueryCreate = 'DROP TABLE IF EXISTS '+ tablename + ";\n"
sqlQueryCreate += 'CREATE TABLE'+ tablename + "("
#some loop or function according to your requiremennt
# Define columns for table
for column in columns:
sqlQueryCreate += column + " VARCHAR(64),\n"
sqlQueryCreate = sqlQueryCreate[:-2]
sqlQueryCreate += ");"
cur.execute(sqlQueryCreate)
conn.commit()
cur.close()
这应该涵盖问题;但我无法测试代码
我不使用 psycopg2。我假设 connect() 有效。
您好,我正在寻找可以让我从 csv 文件创建 table 的解决方案。我在另一个论坛上找到解决方案。此代码如下所示:
import csv
import psycopg2
import os
import glob
conn = psycopg2.connect("host= localhost port=5433 dbname=testDB user= postgres password= ************")
print("Connecting to Database")
cur = conn.cursor()
csvPath = "W:\Maciej.Olech\structure_files"
# Loop through each CSV
for filename in glob.glob(csvPath+"*.csv"):
# Create a table name
tablename = filename.replace("W:\Maciej.Olech\structure_files", "").replace(".csv", "")
print(tablename)
# Open file
fileInput = open(filename, "r")
# Extract first line of file
firstLine = fileInput.readline().strip()
# Split columns into an array [...]
columns = firstLine.split(",")
# Build SQL code to drop table if exists and create table
sqlQueryCreate = 'DROP TABLE IF EXISTS '+ tablename + ";\n"
sqlQueryCreate += 'CREATE TABLE'+ tablename + "("
#some loop or function according to your requiremennt
# Define columns for table
for column in columns:
sqlQueryCreate += column + " VARCHAR(64),\n"
sqlQueryCreate = sqlQueryCreate[:-2]
sqlQueryCreate += ");"
cur.execute(sqlQueryCreate)
conn.commit()
cur.close()
我尝试 运行 此代码,但出现此错误:
C:\Users\MACIEJ~1.OLE\AppData\Local\Temp/ipykernel_5320/1273240169.py in <module>
40 sqlQueryCreate += ");"
41
---> 42 cur.execute(sqlQueryCreate)
43 conn.commit()
44 cur.close()
NameError: name 'sqlQueryCreate' is not defined
我不明白为什么会出现此错误,因为定义了 sqlQueryCreate。 任何人都知道出了什么问题?感谢您的帮助。
您的代码存在一些问题。
- 在 Windows 中,路径需要转义
\
。 - 你的
cur.execute(sqlQueryCreate)
和conn.commit()
缩进错了。sqlQueryCreate = sqlQueryCreate[:-2]
同上 和sqlQueryCreate += ");"
- 编辑:意识到您的 glob.glob() 参数不正确。你想要的:
W:\Jan.Bree\structure_files\*.csv
,你实际拥有的W:\Jan.Bree\structure_files*.csv
import csv
import psycopg2
import os
import glob
conn = psycopg2.connect("host= localhost port=5433 dbname=testDB user= postgres password= ************")
print("Connecting to Database")
cur = conn.cursor()
csvPath = "W:\Jan.Bree\structure_files"
# Loop through each CSV
for filename in glob.glob(os.path.join(csvPath,"*.csv")):
# Create a table name
tablename = filename.replace("W:\Jan.Bree\structure_files", "").replace(".csv", "")
print(tablename)
# Open file
fileInput = open(filename, "r")
# Extract first line of file
firstLine = fileInput.readline().strip()
# Split columns into an array [...]
columns = firstLine.split(",")
# Build SQL code to drop table if exists and create table
sqlQueryCreate = 'DROP TABLE IF EXISTS '+ tablename + ";\n"
sqlQueryCreate += 'CREATE TABLE'+ tablename + "("
#some loop or function according to your requiremennt
# Define columns for table
for column in columns:
sqlQueryCreate += column + " VARCHAR(64),\n"
sqlQueryCreate = sqlQueryCreate[:-2]
sqlQueryCreate += ");"
cur.execute(sqlQueryCreate)
conn.commit()
cur.close()
这应该涵盖问题;但我无法测试代码 我不使用 psycopg2。我假设 connect() 有效。