[英]Create Postgresql table from csv file using psycopg2
Hi I looking for solutions that let me create table from csv files.嗨,我正在寻找让我从 csv 文件创建表的解决方案。 I find solution on another forum.
我在另一个论坛上找到了解决方案。 This code looks like this:
此代码如下所示:
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()
I try to run this code but i get this error:我尝试运行此代码,但出现此错误:
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
I don't understand why i have this error becouse sqlQueryCreate is defined.我不明白为什么我有这个错误,因为定义了 sqlQueryCreate。 Any one have idea what is wrong?
有人知道出了什么问题吗? Thanks for any help.
谢谢你的帮助。
There are a few issues with your code.您的代码存在一些问题。
\
escaped.\
。cur.execute(sqlQueryCreate)
and conn.commit()
are indented wrong.cur.execute(sqlQueryCreate)
和conn.commit()
缩进错误。 ditto with sqlQueryCreate = sqlQueryCreate[:-2]
and sqlQueryCreate += ");"
sqlQueryCreate = sqlQueryCreate[:-2]
和sqlQueryCreate += ");"
W:\\Jan.Bree\\structure_files\\*.csv
, what you actually had W:\\Jan.Bree\\structure_files*.csv
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()
This should cover the issues;这应该涵盖这些问题; but I have no way of testing the code as I don't use psycopg2.
但我无法测试代码,因为我不使用 psycopg2。 I'm assuming that the connect() works.
我假设 connect() 有效。
You do too much work, there is the Alchemy library and things are done quickly and painlessly.你做了太多的工作,有炼金术库,事情可以快速轻松地完成。
import pandas as pd
from sqlalchemy import create_engine
import psycopg2
df = pd.read_csv('W:\Maciej.Olech\structure_files.csv', sep=',')
##> {dialect}+{driver}://{user}:{password}@{host}:{port}/{database}
# database = bazakot22
# user = foka2
# password = #gg3Ewampkl
# host = 127.0.0.1
# port= 5432
engine = create_engine('postgresql://foka2:#gg3Ewampkl@127.0.0.1:5432/bazakot22')
df.to_sql("table_name4", engine)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.