PostgreSQL 学习之使用psycopg2 操作之数据库不存在才创建

大声的告诉我是不是被我标题中的两个“之”给带进来的??手动滑稽

需求

自己的一款软件 GitHub 地址,关于PostgreSQL 已经设置成运行后自动创建序列,表和函数,但是数据库还是要手动去创建,很不方便,想使用创建序列和表同样的方法,去自动创建数据库

过程

DDL 语句如下:

DB_NAME = """
CREATE DATABASE if not exists {};

ALTER DATABASE {} OWNER TO postgres;
""".format(DATABASE_NAME, DATABASE_NAME)
发现会报一个DDL 语句语法错误
psycopg2.ProgrammingError: syntax error at or near "not"
LINE 2: CREATE DATABASE if not exists test_classs;

创建序列和表的时候都没问题啊(函数我使用的是先删除,后创建),这怎么报错了?本着先运行成功,再实现功能的原则,我把“if not exists”给去掉,结果还是报错:

psycopg2.InternalError: CREATE DATABASE cannot run inside a transaction block

不能在事务块中创建数据库,大概意思就是这样不安全吧,百度加谷歌,有两种方法:

1.在 psycopg2 extensions 里使用 ISOLATION_LEVEL_AUTOCOMMIT,原理就是让连接发出命令时不启动任何事务,看常量名字,字面意思也是自动提交,并且不需要commit()或rollback()如:

import psycopg2
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT # <-- ADD THIS LINE

con = psycopg2.connect(...)

con.set_isolation_lev
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值