3 回答

TA貢獻1155條經驗 獲得超0個贊
以下是對我有用的方法:import glob
此代碼自動讀取文件夾中的所有 CSV 文件并創建一個與文件同名的表。 盡管我仍在嘗試弄清楚如何根據 CSV 中的數據提取特定的數據類型。但就表格創建而言,這對一個文件夾中的所有 CSV 文件來說就像一個魅力。
import csv
import psycopg2
import os
import glob
conn = psycopg2.connect("host= hostnamexx dbname=dbnamexx user= usernamexx password=
pwdxx")
print("Connecting to Database")
csvPath = "./TestDataLGA/"
# Loop through each CSV
for filename in glob.glob(csvPath+"*.csv"):
# Create a table name
tablename = filename.replace("./TestDataLGA\\", "").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 = conn.cursor()
cur.execute(sqlQueryCreate)
conn.commit()
cur.close()

TA貢獻1812條經驗 獲得超5個贊
我使用了 sqlalchemy,一個 JSON 文件作為配置和 glob。
import json
import glob
from sqlalchemy import create_engine, text
def create_tables_from_files(files_folder, engine, config):
try:
for filename in glob.glob(files_folder+"\*csv"):
tablename = filename.replace(files_folder, "").replace('\\', "").replace(".csv", "")
input_file = open(filename, "r")
columns = input_file.readline().strip().split(",")
create_query = 'DROP TABLE IF EXISTS ' + config["staging_schema"] + "." + tablename + "; \n"
create_query +='CREATE TABLE ' + config["staging_schema"] + "." + tablename + " ( "
for column in columns:
create_query += column + " VARCHAR, \n "
create_query = create_query[:-4]
create_query += ");"
engine.execute(text(create_query).execution_options(autocommit=True))
print(tablename + " table created")
except:
print("Error at uploading tables")

TA貢獻1982條經驗 獲得超2個贊
我試過你的代碼并且工作正常
import psycopg2
conn = psycopg2.connect("host= 127.0.0.1 dbname=testdb user=postgres password=postgres")
print("Connecting to Database")
cur = conn.cursor()
'''cur.execute("""CREATE TABLE abstable1(
absid varchar(10) PRIMARY KEY,
name integer,
number integer
)
""")'''
with open('lolo.csv', 'r') as f:
next(f)
cur.copy_from(f, 'abstable1', sep=',', columns=('absid', 'name', 'number'))
conn.commit()
conn.close()
盡管我必須對其進行一些更改才能正常工作:我必須將表命名為abstable1因為使用abs.abstable1 postgres 假定我正在使用模式abs,如果不檢查它,也許您在數據庫上創建了該模式,也我正在使用 python 3.7 我注意到你正在使用 python 2.7(我認為它不再受支持),這可能會導致問題,因為你說你正在學習我建議你使用 python 3,因為它現在被更多地使用并且你很可能會遇到寫在上面的代碼,你必須調整你的代碼以適應你的 python 2.7
添加回答
舉報