怎么使用Python将基于CSV的表格自动创建到Postgres中

本教程将介绍如何使用Python将基于CSV的表格自动创建到Postgres中的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么使用Python将基于CSV的表格自动创建到Postgres中 教程 第1张

问题描述

我是一名新的Python程序员,正在尝试使用Python脚本将示例CSV文件导入到我的Postgres数据库中。
我有名为abstable1的CSV文件,它有3个标题:

Absid、姓名、号码
我在一个文件夹里有很多这样的文件
我想为所有人在PostgreSQL中创建一个与CSV文件同名的表。

以下是我尝试为一个文件创建一个表以进行测试的代码:

import psycopg2
import csv
import os

#filePath = 'c:Python27Scriptsabstable1.csv'
conn = psycopg2.connect("host= hostnamexx dbname=dbnamexx user= usernamexx password= pwdxx")
print("Connecting to Database")
cur = conn.cursor()

#Uncomment to execute the code below to create a table
cur.execute("""CREATE TABLE abs.abstable1(
absid varchar(10) PRIMARY KEY,
name integer,
number integer 
)
 """)
#to copy the csv data into created table
with open('abstable1.csv', 'r') as f:
 next(f)
 cur.copy_from(f, 'abs.abstable1', sep=',')
conn.commit()
conn.close()

这是我收到的错误:

File "c:Python27Scripts	estabs.py", line 26, in <module>
 cur.copy_from(f, 'abs.abstable1', sep=',')
psycopg2.errors.QueryCanceled: COPY from stdin failed: error in .read() call: exceptions.ValueError Mixing iteration and read methods would lose data
CONTEXT:  COPY abstable1, line 1

我们非常感谢任何解决此问题的建议或替代解决方案。

推荐答案

以下是适用于我的方法: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 + ";
"
sqlQueryCreate += 'CREATE TABLE'+ tablename + "("

#some loop or function according to your requiremennt
# Define columns for table
for column in columns:
 sqlQueryCreate += column + " VARCHAR(64),
"

sqlQueryCreate = sqlQueryCreate[:-2]
sqlQueryCreate += ");"

cur = conn.cursor()
cur.execute(sqlQueryCreate)
conn.commit()
cur.close()

好了关于怎么使用Python将基于CSV的表格自动创建到Postgres中的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。