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 = '1111'
        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.

 

转载于:https://www.cnblogs.com/xuanmanstein/p/10698731.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值