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

1、准备数据

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、数据库中是这样的

python将本地png切片栅格数据写入postgis(Postgre入门三)_第2张图片

你可能感兴趣的:(MySQL,postgresq,MongoDB,Redis,postgis)