【问题标题】:Creating a postgresql DB using psycopg2使用 psycopg2 创建 postgresql 数据库
【发布时间】:2013-10-25 22:14:53
【问题描述】:

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

谁能告诉我正确的做法。 谢谢

【问题讨论】:

  • set_isolation_level 是我让它工作的必要步骤。

标签: python postgresql psycopg2


【解决方案1】:

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 客户端库,检查这个文件以获得正确的登录信息。非常好用。

【讨论】:

  • 非常感谢,您的编辑和ALTER USER your_username CREATEDB; 工作正常。
  • @Nicolas 我用你的方法成功创建了新的数据库,我想添加一行可以打印出我在服务器中的当前数据库,我该如何编写代码?
  • 查询 Postgres 元数据以列出数据库:select datname from pg_database。有关 PG 元数据的更多信息,请参阅 postgresql.org 上的文档。
  • 小修复:当在 psycopg2.connect 中使用关键字参数时,数据库名称应使用'database'关键字(而不是'dbname'):docs
猜你喜欢
  • 2011-07-21
  • 2017-09-25
  • 1970-01-01
  • 2022-01-09
  • 2011-08-09
  • 2016-02-08
  • 2022-01-12
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多