使用psycopg2创建postgresql数据库

nis*_*ish 46 python postgresql psycopg2

我正在尝试使用python脚本创建一个postgres数据库.一些研究表明,使用psycopg2模块可能是一种方法.我安装了它并在pg_hba.conf文件中进行了必要的更改.我使用以下代码创建数据库:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from psycopg2 import connect
import sys
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT

con = None
con = connect(user='****', host = 'localhost', password='****')

dbname = "voylla_production1710"

con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cur = con.cursor()
cur.execute('CREATE DATABASE ' + dbname)
cur.close()
con.close()
Run Code Online (Sandbox Code Playgroud)

我试图取代con = connect(user='nishant', host = 'localhost', password='everything')con = connect(user='nishant', password='everything')

但我得到以下错误:

con = connect(user='nishant', host = 'localhost', password='everything') 
 File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect
connection_factory=connection_factory, async=async)
 psycopg2.OperationalError: FATAL:  database "nishant" does not exist
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我正确的做法.谢谢

Nic*_*las 57

PostgreSQL的客户端默认连接到以用户命名的数据库.这就是你得到错误致命的原因: database "nishant" does not exist.

您可以连接到默认系统数据库postgres,然后发出查询以创建新数据库.

con = connect(dbname='postgres', user='nishant', host='localhost', password='everything')
Run Code Online (Sandbox Code Playgroud)

确保您的nishant用户有权创建数据库.

编辑:顺便说一下,检查〜/ .pgpass文件以安全地存储密码而不是源代码(http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html).libpq,postgresql客户端librairy,检查此文件以获取正确的登录信息.这非常方便.