如何将CSV文件数据导入到PostgreSQL表中?

我如何编写一个从CSV文件导入数据并填充表的存储过程?


看看这篇短文。


解决方案解释如下:

创建你的表格:

CREATE TABLE zip_codes 
(ZIP char(5), LATITUDE double precision, LONGITUDE double precision, 
CITY varchar, STATE char(2), COUNTY varchar, ZIP_CLASS varchar);

将CSV文件中的数据复制到表格中:

COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' WITH (FORMAT csv);

如果您没有权限使用COPY (可在数据库服务器上工作),则可以使用copy (可在数据库客户机中工作)。 使用与Bozhidar Batsov相同的例子:

创建你的表格:

CREATE TABLE zip_codes 
(ZIP char(5), LATITUDE double precision, LONGITUDE double precision, 
CITY varchar, STATE char(2), COUNTY varchar, ZIP_CLASS varchar);

将CSV文件中的数据复制到表格中:

copy zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV

您也可以指定要读取的列:

copy zip_codes(ZIP,CITY,STATE) FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV

一个快速的方法是使用Python熊猫库(版本0.15或更高)。 这将为您创建列 - 尽管显然它为数据类型所做的选择可能不是您想要的。 如果它不完全符合您的要求,您可以始终使用生成的“创建表”代码作为模板。

这里有一个简单的例子:

import pandas as pd
df = pd.read_csv('mypath.csv')
df.columns = [c.lower() for c in df.columns] #postgres doesn't like capitals or spaces

from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/dbname')

df.to_sql("my_table_name", engine)

以下是一些代码,向您展示如何设置各种选项:

#Set is so the raw sql output is logged
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)

df.to_sql("my_table_name2", 
          engine, 
          if_exists="append",  #options are ‘fail’, ‘replace’, ‘append’, default ‘fail’
          index=False, #Do not output the index of the dataframe
          dtype={'col1': sqlalchemy.types.NUMERIC,
                 'col2': sqlalchemy.types.String}) #Datatypes should be [sqlalchemy types][1]
链接地址: http://www.djcxy.com/p/65171.html

上一篇: How to import CSV file data into a PostgreSQL table?

下一篇: How to extract name from string using nltk