基于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.