如何将shape数据 导入到Postgresql数据库中(单个和批量)

4 篇文章 0 订阅
3 篇文章 0 订阅

一. 背景

很多时候我们需要将shape数据导入到Postgresql数据库,将数据db化。
本文主要讲解四种方式:
使用QGIS工具导入(单个)、通过POSTGIS工具导入(单个或少量)、使用postgresql2 命令工具导入(单个)、使用python脚本批量导入shape数据(批量)。

导入数据的前提:在postgreSQL中创建PostGIS空间扩展模块,在连接数据库后执行下列sql:

CREATE EXTENSION postgis;

二. 使用QGIS工具导入(单个)

前提:安装QGIS

1. 使用QGIS工具打开需要导入的shp文件

打开shp文件方式可以参考博文:QGIS教程 加载shape数据 矢量数据(批量)

2.连接PG数据库

在QGIS工具的左侧工具部分,选择【PostgreSQL】右键点击 【New Connection】
在这里插入图片描述
输入对应的数据库相关信息,包括账号、密码、端口、数据库名等信息。最后点击【确定】如无报错即可成功创建数据库连接。
在这里插入图片描述

3.使用Database导入数据

点击上方菜单栏【Database】的【DB Manager】
在这里插入图片描述
可以看到对应数据库PG连接
在这里插入图片描述
选择对应数据库后,点击按钮【Import Layer/File】
在这里插入图片描述
然后即可选择对应shape文件,最后点击【确定】按钮,即导入成功。
在这里插入图片描述

在数据库中即可看到对应shape数据的表数据。

三. 通过PostGIS工具导入(单个或少量)

1.打开 应用PostGIS Bundle 3

在这里插入图片描述

2.AddFile 添加shape文件

点击【AddFile】按钮,选择对应需要导入的shape文件,可以选择单个或者多个
在这里插入图片描述

3.开始导入【import】

选择shape文件后,点击【import】,即可导入对应文件dbf或者shp到数据库中
在这里插入图片描述

四. 使用postgresql2 命令工具导入(单个)

1.导入postgresql2基本命令

shp2pgsql [options] shapefile_table_name database_name | psql [connection_option] [database_name]

常用选项:
以下是一些常用的 shp2pgsql 选项:

-c:创建一个新表,如果表已经存在则先删除。
-a:追加数据到现有表中,如果表不存在则创建。
-I:在导入过程中创建空间索引。
-s :设置空间参考系统的 SRID。
-W “latin1”:指定字符集,用于导入 Shapefile 数据。这里的 “latin1” 是一个示例,您可能需要根据实际情况指定字符集。

2. 示例:

(1)创建新表并导入数据:

shp2pgsql -c -s 4326 /path/to/your/shapefile.shp your_table_name | psql -d your_database -U your_user

这将创建一个新表 your_table_name 并导入 Shapefile 数据到该表中。

(2)追加数据到现有表:

`shp2pgsql -a -s 4326 /path/to/your/shapefile.shp your_existing_table_name | psql -d your_database -U` your_user

这将把 Shapefile 数据追加到现有的 your_existing_table_name 表中。

(3)在导入过程中创建空间索引:

shp2pgsql -I -s 4326 /path/to/your/shapefile.shp your_table_name | psql -d your_database -U your_user

这将在导入数据的同时创建空间索引。

3. 注意点:

(1)在执行shp2pgsql 命令时,需要在对应shp2pgsql.exe目录使用cmd 命令进入执行。
(2)每次执行命令后,会输入对应数据库密码(如果需要不输入密码,可以通过.pgpass文件进行密码配置)

五. 使用python脚本批量导入shape数据(批量)

直接给出示例,下列示例可以实现【批量】将xxx文件夹下所有的shape文件,导入到数据库shapeData里面

import geopandas as gpd
from sqlalchemy import create_engine
from geoalchemy2 import Geometry,WKTElement
import os

# 设置 Shapefile 文件夹路径
shapefile_folder = "xxx"

# 遍历根文件夹下所有子文件夹
for subdir, dirs, files in os.walk(shapefile_folder):
    for file in files:
        # 检查文件扩展名是否为 .shp,可以根据实际情况修改
        if file.lower().endswith('.shp') :            
            # 构建完整的文件路径
            shp_path = os.path.join(subdir, file)
            print(shp_path)
            engine = create_engine('postgresql://userName:password@localhost:5432/shapeData')
            # userName:password对应代表你的用户名和密码,格式为用户名:密码
            # localhost:port 为对应地址和端口
            # shapeData:数据库名

            map_data = gpd.GeoDataFrame.from_file(shp_path)
            map_data['geometry'] = map_data['geometry'].apply(lambda x: WKTElement(x.wkt, 4326))
            # if_exists可以使用'replace'或者'append',分别代表替换和追加
            # road_shp_data为数据导入到的数据库表名
            map_data.to_sql("road_shp_data", engine, if_exists='append', index=False,
                            dtype={
                                'geometry': Geometry(geometry_type='LineString', srid=4326)}
                            )

六. 四种方式对比

(1)QGIS工具导入:

每次只支持单个,不推荐,且还需要安装QGIS软件,带来额外工具成本

(2)通过PostGIS工具导入(单个或少量):

每次支持单个或少量个数,但是数据在多个不同文件夹下时,不方便全部导入

(3)postgresql2 命令工具:

命令行运行简单,只支持单个,且每次需要密码,在导入少量shape数据时推荐

(4)python脚本批量导入:

支持批量,脚本代码灵活,可编辑性强,缺点是:需要稍微懂一点python脚本

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以按照以下步骤将CSV文件导入PostgreSQL数据库: 1. 创建目标表格:在PostgreSQL数据库创建一个表格,该表格具有与CSV文件列相对应的列名和数据类型。您可以使用以下命令来创建表格: ``` CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ..... ); ``` 例如,如果您的CSV文件包含名称,年龄和电子邮件列,则可以使用以下命令创建表格: ``` CREATE TABLE persons ( name VARCHAR(255), age INTEGER, email VARCHAR(255) ); ``` 2. 将CSV文件复制到表格:使用PostgreSQL的COPY命令将CSV文件数据复制到表格。使用以下命令: ``` COPY table_name FROM 'file_path' DELIMITER ',' CSV HEADER; ``` 在这里,`table_name`是您刚刚创建的表格的名称,`file_path`是CSV文件的路径,`DELIMITER`是分隔符,CSV文件的每个字段都由该分隔符分隔。在上面的示例,我们使用逗号作为分隔符。`CSV HEADER`表示第一行包含列名。 例如,如果您想将名为`persons.csv`的CSV文件复制到名为`persons`的表格,则可以使用以下命令: ``` COPY persons FROM '/path/to/persons.csv' DELIMITER ',' CSV HEADER; ``` 这将导入CSV文件的所有数据到表格。 3. 确认导入:使用SELECT语句检查表格是否存在您导入数据。例如,您可以使用以下命令检查`persons`表格的所有数据: ``` SELECT * FROM persons; ``` 如果所有数据都被成功导入,则会显示所有人的名称,年龄和电子邮件。 请注意,导入数据时,您需要确保表格的列名和数据类型与CSV文件的列相匹配。如果CSV文件的列名与表格的列名不匹配,则可以使用`CSV HEADER`选项将第一行作为列名导入。如果数据类型不匹配,则可能需要在导入数据之前将数据转换为正确的类型。 ### 回答2: 要将csv文件导入PostgreSQL数据库,可以按照以下步骤进行操作: 1. 在PostgreSQL创建一个目标表,以匹配csv文件的列。可以使用CREATE TABLE语句来定义表的结构,并且确保列的数据类型与csv文件的数据类型匹配。 2. 使用psql或pgAdmin等PostgreSQL的客户端工具连接到数据库。 3. 使用COPY命令将csv文件的内容导入PostgreSQL数据库的目标表。COPY命令具有导入数据的功能,语法如下: COPY table_name FROM 'file_path' DELIMITER ',' CSV HEADER; 其,table_name是目标表的名称,file_path是csv文件的路径,DELIMITER指定csv文件字段的分隔符(一般是逗号),CSV表示csv文件的格式,HEADER是指定csv文件是否包含标题行。 4. 运行以上COPY命令,将csv文件的内容导入PostgreSQL数据库的目标表。命令执行成功后,数据就会被加载到数据库。 注意事项: - 保证csv文件的路径正确且PostgreSQL服务器对该路径具有读取权限。 - 为了确保导入数据正确,csv文件的内容和目标表的结构应该匹配。 - 如果csv文件的某些列不需要导入数据库,可以在创建表时将它们定义为可选列,然后在COPY命令省略这些列。 以上就是将csv文件导入PostgreSQL数据库的基本步骤。根据实际情况,你可能需要调整和修改这些步骤,以满足具体的要求。 ### 回答3: 要将CSV文件导入PostgreSQL数据库,可以按照以下步骤操作: 步骤1:准备CSV文件和数据库表 首先,确保你已经准备好了CSV文件和对应的数据库表。CSV文件应该包含要导入数据数据库表应该已经创建,并且与CSV文件数据字段相匹配。 步骤2:连接到数据库 使用适当的数据库客户端或命令行工具连接到PostgreSQL数据库。 步骤3:创建临时表 在数据库创建一个临时表,该表的结构应该与CSV文件数据字段结构相匹配。 步骤4:导入CSV文件到临时表 使用以下命令将CSV文件数据导入到临时表: COPY temp_table_name FROM 'file_path' DELIMITER ',' CSV HEADER; 其,temp_table_name是临时表的名称,file_path是CSV文件的路径。 步骤5:处理数据 根据需要,你可以对导入数据进行清洗或处理操作,例如删除重复项、转换数据类型等。 步骤6:将数据导入到目标表 使用INSERT INTO语句将临时表数据导入到目标表: INSERT INTO target_table_name SELECT * FROM temp_table_name; 其,target_table_name是目标表的名称。 步骤7:清理临时表 在完成数据导入后,可以删除临时表。 以上是将CSV文件导入PostgreSQL数据库的基本步骤。根据具体情况,你可能需要根据数据的结构和需要进行适当的调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值