如何在Django中设置PostgreSQL数据库


107

我是Python和Django的新手。

我正在使用PostgreSQL数据库引擎后端配置Django项目,但是每个数据库操作都出现错误。例如,当我跑步时manage.py syncdb,我得到:

C:\xampp\htdocs\djangodir>python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
438, in execute_manager
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
261, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
67, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in im
port_module
    __import__(name)
  File "C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py"
, line 7, in <module>
    from django.core.management.sql import custom_sql_for_model, emit_post_sync_
signal
  File "C:\Python27\lib\site-packages\django\core\management\sql.py", line 6, in
 <module>
    from django.db import models
  File "C:\Python27\lib\site-packages\django\db\__init__.py", line 77, in <modul
e>
    connection = connections[DEFAULT_DB_ALIAS]
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 92, in __getitem
__
    backend = load_backend(db['ENGINE'])
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 33, in load_back
end
    return import_module('.base', backend_name)
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in im
port_module
    __import__(name)
  File "C:\Python27\lib\site-packages\django\db\backends\postgresql\base.py", li
ne 23, in <module>
    raise ImproperlyConfigured("Error loading psycopg module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg module: No mo
dule named psycopg

有人可以告诉我发生了什么吗?


11
似乎很清楚:没有名为psycopg的模块。你安装了吗?
Daniel Roseman

不,我没有。我会尽量去做
安德烈·

1
有人可以告诉我们为什么需要带有Django的psycopg2吗?
阿姆里特

Answers:


210

您需要安装psycopg2Python库。

安装


下载http://initd.org/psycopg/,然后将其安装在Python PATH下

下载后,轻松解压缩tarball并:

$ python setup.py install

或者,如果愿意,可以通过easy_installpip进行安装。

我更喜欢无缘无故地使用pip而不是easy_install。

  • $ easy_install psycopg2
  • $ pip install psycopg2

组态


设置 .py中

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'db_name',                      
        'USER': 'db_user',
        'PASSWORD': 'db_user_password',
        'HOST': '',
        'PORT': 'db_port_number',
    }
}

-其他安装说明可在下载页面安装页面找到


2
嗨,我按照您的指示进行了操作,但是似乎我应该在settings.py中使用它们之前创建用户/密码对。
玉龙2012年

2
但是psycopg2.OperationalError: fe_sendauth: no password supplied我跑步时明白了python manage.py syncdb。我设置随机表名和用户名。
玉龙2012年

1
@RedRory谢谢,他们现在很好;)
Alireza Savand 2013年

1
仅供参考:从Django 1.9开始,您可以说:'ENGINE':'django.db.backends.postgresql',
powlo

1
我对这个答案的问题是无法django.db.backends.postgresql使用psycopg2。起作用的是django.db.backends.postgresql_psycopg2后端,并避免在每次在Windows上启动pgAdmin时都指定端口号,因为它会更改
Mustapha-Belkacim


21

我使用的分步指南:

 - sudo apt-get install python-dev
 - sudo apt-get install postgresql-server-dev-9.1
 - sudo apt-get install python-psycopg2 - Or sudo pip install psycopg2

您可能需要安装图形工具来管理数据库,为此,您可以执行以下操作:

sudo apt-get install postgresql pgadmin3 

之后,您必须更改Postgre用户密码,然后执行以下操作:

 - sudo su
 - su postgres -c psql postgres
 - ALTER USER postgres WITH PASSWORD 'YourPassWordHere';
 - \q

在您的settings.py文件中,您可以执行以下操作:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': '',
        'PORT': '',
    }
}

额外:

如果要使用命令行创建数据库,则可以执行以下操作:

- sudo su
- su postgres -c psql postgres
- CREATE DATABASE dbname;
- CREATE USER djangouser WITH ENCRYPTED PASSWORD 'myPasswordHere';
- GRANT ALL PRIVILEGES ON DATABASE dbname TO djangouser;

在您的settings.py文件中,您可以执行以下操作:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'djangouser',
        'PASSWORD': 'myPasswordHere',
        'HOST': '',
        'PORT': '',
    }
}

9

这似乎有点冗长,但是对我来说没有任何错误。

首先,从Ubuntu软件中心安装phppgadmin。

然后在终端中运行这些步骤。

sudo apt-get install libpq-dev python-dev
pip install psycopg2
sudo apt-get install postgresql postgresql-contrib phppgadmin

启动apache服务器

sudo service apache2 start

现在在终端中也运行此命令以编辑apache文件。

sudo gedit /etc/apache2/apache2.conf

将以下行添加到打开的文件中:

Include /etc/apache2/conf.d/phppgadmin

现在重新加载apache。使用终端。

sudo /etc/init.d/apache2 reload

现在,您将不得不创建一个新的数据库。以“ postgres”用户身份登录。在终端继续。

sudo su - postgres

如果您在使用密码“ postgres”时遇到麻烦,可以在此处使用答案https://stackoverflow.com/a/12721020/1990793进行更改,然后继续执行步骤。

现在创建一个数据库

createdb <db_name>

现在,创建一个新用户以稍后登录到phppgadmin,并提供一个新密码。

createuser -P <new_user>

现在您的postgressql已设置完毕,您可以转到:

http://localhost/phppgadmin/

并使用您创建的新用户登录,以查看数据库。


为什么要打扰PHP?问题是关于Django ...?
Sidhin S Thomas

1
@SidhinThomas phpPgAdmin是PostgreSQL的常用管理工具。它不取决于数据库运行的语言/框架。
吉布·詹姆斯

没有像Postgres的MySQL工作台那样的东西吗?
Sidhin S Thomas

1
@SidhinThomas是的,有很多类似于MySQL工作台的GUI工具。在这里看看。wiki.postgresql.org/wiki/...
疾步詹姆斯



3

如果您使用的是Fedora 20,Django 1.6.5,postgresql 9.3。*,并且需要psycopg2模块,请执行以下操作:

yum install postgresql-devel
easy_install psycopg2

如果您像我一样,可能会找不到有据可查的libpq-dev rpm。


3

我在Mac上遇到过同样的问题。

解决方案是仅使用PIP来安装所有东西,并触摸一些东西。

首先从以下 网址安装PIP:https //pip.pypa.io/en/latest/

然后,您要确定pg_config的路径是否在PATH中(回显$ PATH),如果没有,则可以编辑bash_profile:

vi /Users/<user>/.bash_profile

并添加以下行:

export PATH=$PATH:/path/to/pg_config/bin

如果您不知道pg_config在哪里,则可以使用“ locate”工具,但是请确保您的locate.db是最新的(我使用的是旧的locate.db,并且使用的路径不存在)。

sudo /usr/libexec/locate.updatedb
locate pg_config

然后安装Django(如果需要)和psycopg2。

sudo pip install Django
sudo pip install psycopg2

然后在settings.py(localhost:defaultport)中

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': '',
        'PORT': '',
    }
}

问候!


2
$ sudo apt-get install libpq-dev

年,这解决了我的问题。执行此操作后,请执行以下操作:pip install psycopg2



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.