python将本地png切片栅格数据写入postgis(Postgre入门三)

1、准备数据

在这里插入图片描述

2、配置好postgre

3、python写入

import psycopg2 as ps
import os
import glob

#找到文件路径下的所有表格名称,返回列表
def getallpngs(file_dir):
     file_lists=[]
     for i,j,k in os.walk(file_dir):
          file_list=glob.glob(os.path.join(i,"*.png"))
          file_lists=file_lists+file_list

     return file_lists

# 连接数据库
def getconn():
     return ps.connect(database=database,user=user,password=password,host=host,port=port)

# 创建数据表
def create_table(tablename,sql):
     conn = getconn()
     cur = conn.cursor()
     try:
          cur.execute(sql)
          conn.commit()
          cur.close()
          conn.close()
          print("{}数据库创建成功!!!".format(tablename))
     except Exception as e:
          print("{}数据库表已存在!!!".format(tablename))
# 插入数据
def insert_data(tablename,data):
     conn = getconn()
     cur = conn.cursor()
     key_list = []
     value_list=[]
     sql = '''insert into {}(%s) values(%s);'''.format(tablename)
     
     for k,v in data.items():
          if k!='id' and k!='tablename':
               key_list.append(k)
               value_list.append('%%(%s)s' % k)
     sql = sql % (','.join(key_list),','.join(value_list))
     
     try:
          cur.execute(sql,data)
          conn.commit()
          # print('插入数据成功')
     except:
          conn.rollback()
          # print("插入数据失败")
     cur.close()
     conn.close()

# 查询表数据
def query(sql):
     conn= getconn()
     cursor = conn.cursor()
     cursor.execute(sql)
     # 返回所有数据
     class_list = cursor.fetchall()
     cursor.close()
     conn.close()
     return class_list
if __name__ == "__main__":
     tablename="img_test"
     sql = "create table {} (name text NOT NULL, content bytea NOT NULL);".format(tablename)
     # 1、创建数据库表
     create_table("table_tdt",sql)
     
     # 2、获取本地数据路径
     image_dir = './data' #the path of images
     file_lists=getallpngs(image_dir)
     
     # 3、写入数据
     for fileone in file_lists:
          with open(fileone,'rb') as reader:
               buffer = reader.read()     
          data={}
          data['name']=fileone
          data['content']=ps.Binary(buffer)
          insert_data(tablename,data)

4、数据库中是这样的

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS从业者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值