使用psycopg2创建一个PostgreSQL数据库

48

我正在尝试使用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()

我尝试将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

有人能告诉我正确的做法吗。 谢谢


1
set_isolation_level 对我来说是必要的一步,让它正常工作。 - wordsforthewise
1个回答

59

默认情况下,PostgreSQL的客户端连接到以用户命名的数据库。这就是为什么您会收到错误消息 FATAL: database "nishant" does not exist 的原因。

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

con = connect(dbname='postgres', user='nishant', host='localhost', password='everything')

请确保您的nishant用户具有创建数据库的权限。

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


1
非常感谢,您的修改和 ALTER USER your_username CREATEDB; 命令已经生效。 - nish
@Nicolas,我已经成功地按照你的方法创建了新的数据库,现在我想添加一行代码来打印出我在服务器上当前拥有的数据库,你能告诉我该如何编写代码吗? - Heinz
查询 Postgres 的元数据以列出数据库:select datname from pg_database。有关 PG 元数据的更多信息,请参阅 postgresql.org 上的文档。 - Nicolas
小修复:当在psycopg2.connect中使用关键字参数时,应该使用“database”关键字来指定数据库名称(而不是“dbname”):文档 - Liubov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接