基于python将数字图片存储到postgreSQL中
import os
from PIL import Image
import psycopg2 as ps
from io import StringIO, BytesIO
def table_exist(table_name=None, conn=None):
if conn is not None:
cur = conn.cursor()
try:
cur.execute("select to_regclass(" + "\'" + table_name + "\'" + ") is not null")
rows = cur.fetchall()
except Exception as e:
rows = []
conn.close()
if rows:
data = rows
flag = data[0][0]
return flag
# 1. connect postgresql
conn = ps.connect(host="localhost", user="jiangshan", password="jiangshan", database="imgdb", port="5432")
table_name = "img_tb"
# 2. CREATE TABLE IF table IS NOT EXIST
# 查询出来的表是否存在的状态,存在则为True,不存在则为False
table_flg = table_exist(table_name, conn)
if table_flg is False:
cur = conn.cursor()
# command = "DROP TABLE public.{0} CASCADE".format(table_name)# -- 删除表
command = "CREATE TABLE IF NOT EXISTS {0} (name text NOT NULL, content bytea NOT NULL);".format(table_name)
cur.execute(command)
conn.commit()
# cur.close() # close communication with the PostgreSQL database server
# conn.close()
# 3. insert and store image with binary format
if conn is not None:
cur = conn.cursor()
image_dir = '/imgae_data/beijing'# path of images
for fname in sorted(os.listdir(image_dir)):
if fname.endswith(".jpg"):
#open the image file
with open(os.path.join(image_dir, fname),'rb') as reader:
img_buffer = reader.read()
command = "insert into {0} (name, content) values(%s, %s);".format(table_name)
params = (fname, ps.Binary(img_buffer))
cur.execute(command, params)
conn.commit()# commit the changes
# cur.close()# close communication with the PostgreSQL database server
# conn.close()
# 4. query and show image
if conn is not None:
cur = conn.cursor()
command = "select * from {0} limit 1;".format(table_name)
cur.execute(command)
rcd = cur.fetchone()
img_name = rcd[0]#get name
img_data = rcd[1]#get content
print(img_name)
img = Image.open(BytesIO(img_data))
#img.save(img_name)
img.show()
cur.close() # close communication with the PostgreSQL database server
conn.close()
个人学习记录

浙公网安备 33010602011771号