Como configurar um banco de dados PostgreSQL no Django

107

Sou novo em Python e Django.

Estou configurando um projeto Django usando um back-end do mecanismo de banco de dados PostgreSQL, mas estou recebendo erros em cada operação de banco de dados. Por exemplo, quando corro manage.py syncdb, recebo:

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

Alguém pode me dar uma pista do que está acontecendo?

André
fonte
11
Parece bastante claro: não existe um módulo chamado psycopg. Você já instalou?
Daniel Roseman
Não, não tenho. Vou tentar fazer
André
1
alguém pode dizer por que precisamos de psycopg2 com django?
Amrit de

Respostas:

210

Você precisa instalar a psycopg2biblioteca Python.

Instalação


Baixe http://initd.org/psycopg/ e instale-o em Python PATH

Após o download, extraia facilmente o tarball e:

$ python setup.py install

Ou se desejar, instale-o por easy_install ou pip .

( Eu prefiro usar pip em vez de easy_install sem motivo. )

  • $ easy_install psycopg2
  • $ pip install psycopg2

Configuração


em configurações .py

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

- Outras instruções de instalação podem ser encontradas na página de download e na página de instalação .

Alireza Savand
fonte
2
Olá, sigo suas instruções, mas parece que devo criar o par usuário / pwd antes de usá-lo no settings.py?
Yulong de
2
mas eu psycopg2.OperationalError: fe_sendauth: no password suppliedpercebo quando corro python manage.py syncdb. Eu defino o nome da tabela aleatória e o nome do usuário.
Yulong de
1
@RedRory Obrigado, Eles estão bem agora;)
Alireza Savand
1
Para sua informação: A partir do Django 1.9, você pode dizer: 'ENGINE': 'django.db.backends.postgresql',
powlo
1
O problema que tive com esta resposta é que django.db.backends.postgresqlnão funciona com psycopg2. o que funcionou foi django.db.backends.postgresql_psycopg2o backend e evitou especificar o número da porta, já que ele muda toda vez que você inicia o pgAdmin no Windows
Mustapha-Belkacim 01 de
31

Certifique-se também de ter o pacote de desenvolvimento PostgreSQL instalado. No Ubuntu, você precisa fazer algo assim:

$ sudo apt-get install libpq-dev
Dennis Bunskoek
fonte
21

Passo a passo que utilizo:

 - 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

Você pode querer instalar uma ferramenta gráfica para gerenciar seus bancos de dados, para isso você pode fazer:

sudo apt-get install postgresql pgadmin3 

Depois, você deve alterar a senha do usuário Postgre e fazer:

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

Em seu arquivo settings.py você faz:

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

Extra:

Se você deseja criar o banco de dados usando a linha de comando, basta fazer:

- 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;

Em seu arquivo settings.py você faz:

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

Isso pode parecer um pouco demorado, mas funcionou para mim sem nenhum erro.

Primeiramente, instale o phppgadmin do Ubuntu Software Center.

Em seguida, execute essas etapas no terminal.

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

Inicie o servidor apache

sudo service apache2 start

Agora execute isso também no terminal, para editar o arquivo apache.

sudo gedit /etc/apache2/apache2.conf

Adicione a seguinte linha ao arquivo aberto:

Include /etc/apache2/conf.d/phppgadmin

Agora recarregue o apache. Use o terminal.

sudo /etc/init.d/apache2 reload

Agora você terá que criar um novo banco de dados. Faça login como usuário 'postgres'. Continue no terminal.

sudo su - postgres

Caso você tenha problemas com a senha do 'postgres', você pode alterá-la usando a resposta aqui https://stackoverflow.com/a/12721020/1990793 e continuar com as etapas.

Agora crie um banco de dados

createdb <db_name>

Agora crie um novo usuário para fazer login no phppgadmin mais tarde, fornecendo uma nova senha.

createuser -P <new_user>

Agora seu postgressql foi configurado e você pode ir para:

http://localhost/phppgadmin/

e faça o login usando o novo usuário que você criou, a fim de visualizar o banco de dados.

Jibu James
fonte
por que se preocupar com php? A questão é sobre Django ...?
Sidhin S Thomas
1
@SidhinThomas phpPgAdmin é uma ferramenta de administração comum para PostgreSQL. Não depende de qual linguagem / estrutura o banco de dados é executado.
Jibu James
não há nada como o banco de trabalho MySQL para Postgres?
Sidhin S Thomas
1
@SidhinThomas Sim, existem várias ferramentas GUI semelhantes ao ambiente de trabalho MySQL. Dê uma olhada aqui. wiki.postgresql.org/wiki/…
Jibu James
6

Você pode instalar "psycopg" com o seguinte comando:

# sudo easy_install psycopg2

Como alternativa, você pode usar pip:

# pip install psycopg2

easy_install e pip estão incluídos no ActivePython ou manualmente instalados a partir dos respectivos sites do projeto .

Ou simplesmente obtenha o instalador do Windows pré-compilado .

Sandro Munda
fonte
2
Ou sudo apt-get install python-psycopg2se você estiver em um sistema Debian e quiser usar o gerenciador de pacotes ao invés de pip / easy_install.
Blair
4

O problema imediato parece ser que está faltando o módulo psycopg .

aptwebapps
fonte
3

Se você estiver usando o Fedora 20, Django 1.6.5, postgresql 9.3. * E precisar do módulo psycopg2, faça o seguinte:

yum install postgresql-devel
easy_install psycopg2

Se você for como eu, pode ter problemas para encontrar o bem documentado libpq-dev rpm ... O acima funcionou para mim agora.

MIke Kennedy
fonte
3

Eu estava tendo o mesmo problema no Mac .

A solução foi usar apenas o PIP para instalar tudo e mexer em algumas coisas.

Primeiro instale o PIP em: https://pip.pypa.io/en/latest/

Então você quer ter certeza se o caminho para pg_config está em seu PATH (echo $ PATH), caso contrário, você pode editar seu bash_profile:

vi /Users/<user>/.bash_profile

e adicione esta linha:

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

Se você não sabe onde o pg_config está, você pode usar a ferramenta "locate", mas certifique-se de que o locate.db esteja atualizado (eu estava usando um locate.db antigo e caminhos que não existem).

sudo /usr/libexec/locate.updatedb
locate pg_config

Em seguida, instale o Django (se necessário) e psycopg2.

sudo pip install Django
sudo pip install psycopg2

E então em settings.py (localhost: defaultport)

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

Saudações!

Juan Pablo Arriagada Cancino
fonte
2
$ sudo apt-get install libpq-dev

Ano, isso resolve meu problema. Depois de executar isso, faça: pip install psycopg2

Gregory
fonte
0

Observe que a instalação de psycopg2via pip ou setup.py requer o Visual Studio 2008 (arquivo executável mais precisamente vcvarsall.bat ). Se você não tem direitos de administrador para instalá-lo ou definir a variável PATH apropriada no Windows, você pode baixar a biblioteca já compilada aqui .

Sergey Ivanov
fonte
Que tal isso? Compilador Microsoft Visual C ++ para Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP