psycopg2+postgis+pgAdmin4

基于docker的postgres 部署见这篇 https://www.cnblogs.com/xuanmanstein/p/7742647.html

连接数据库

import psycopg2class MyTestCase(unittest.TestCase):

    @classmethod
def setUpClass(cls):
db = '172.19.0.12'
# root用户 先连到默认数据库
connection_parameters = {
'host': db,
'database': 'postgres',
'user': 'postgres',
'password': 'example'
}
cls.conn = psycopg2.connect(**connection_parameters)
cls.conn.autocommit = True

创建ROLE或USER

必须用连接其他数据库的其他用户,才能删除和创建别的用户,典型如默认用户postgres 连接到postgres,然后删除创建别的用户,和别的数据库

    def test_create_user(self):
#创建用户
name = 'stavka'
pwd = ''
SQL = f'''
DROP ROLE IF EXISTS {name};
CREATE ROLE {name};
ALTER ROLE {name} ENCRYPTED PASSWORD '{pwd}';
ALTER ROLE {name} LOGIN CREATEDB CREATEROLE;
'''
# 执行
with self.conn.cursor() as cursor:
cursor.execute(SQL)

先删除(如果存在),再创建,再设置密码,最后设置各种权限

创建/删除数据库

为了使用postgis,在docker镜像建立的时候,已经1个template_postgis数据库,安装了各种extention,

然后就可以用它作为模板,来创建新数据库


self.conn.autocommit = True
self.conn.set_isolation_level(0)

with self.conn.cursor() as cur:
cur.execute(f'''DROP DATABASE IF EXISTS {db_name};''')
cur.execute(f'''CREATE DATABASE {db_name} OWNER {role_name} TEMPLATE template_postgis;''')

如果pgAdmin4里已经连接了 template 和删除的目标数据库中任意1个,则会报错

psycopg2.errors.ObjectInUse: database "XXX" is being accessed by other users
DETAIL: There is 1 other session using the database.

上一篇:Hibernate_增删改


下一篇:Elasticsearch 通关教程(六): 自动发现机制 - Zen Discoveryedit