Come configurare un database PostgreSQL in Django


107

Sono nuovo di Python e Django.

Sto configurando un progetto Django utilizzando un backend del motore di database PostgreSQL, ma ricevo errori su ogni operazione di database. Ad esempio, quando corro manage.py syncdb, ricevo:

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

Qualcuno può darmi un'idea di cosa sta succedendo?


11
Sembra abbastanza chiaro: non esiste un modulo chiamato psycopg. L'hai installato?
Daniel Roseman

No, non l'ho fatto. Proverò a farlo
André

1
qualcuno può dire perché abbiamo bisogno di psycopg2 con django?
Amrit

Risposte:


210

Devi installare la psycopg2libreria Python.

Installazione


Scarica http://initd.org/psycopg/ , quindi installalo in Python PATH

Dopo il download, estrai facilmente il tarball e:

$ python setup.py install

Oppure, se lo desideri, installalo tramite easy_install o pip .

( Preferisco usare pip su easy_install senza motivo. )

  • $ easy_install psycopg2
  • $ pip install psycopg2

Configurazione


nelle impostazioni .py

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

- Altre istruzioni di installazione sono disponibili nella pagina di download e nella pagina di installazione .


2
Ciao, seguo le tue istruzioni ma sembra che dovrei creare la coppia utente / pwd prima di utilizzarli in settings.py?
Yulong

2
ma ottengo questo psycopg2.OperationalError: fe_sendauth: no password suppliedquando corro python manage.py syncdb. Ho impostato il nome della tabella casuale e il nome utente.
Yulong

1
@RedRory Grazie, stanno bene adesso;)
Alireza Savand

1
FYI: A partire da Django 1.9 puoi dire: 'ENGINE': 'django.db.backends.postgresql',
powlo

1
Il problema che ho avuto con questa risposta è che django.db.backends.postgresqlnon funziona psycopg2. ciò che ha funzionato è il django.db.backends.postgresql_psycopg2back-end ed ha evitato di specificare il numero di porta poiché cambia ogni volta che si avvia pgAdmin su Windows
Mustapha-Belkacim

31

Assicurati anche di avere installato il pacchetto di sviluppo PostgreSQL. Su Ubuntu devi fare qualcosa del genere:

$ sudo apt-get install libpq-dev

21

Passo dopo passo che utilizzo:

 - 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

Potresti voler installare uno strumento grafico per gestire i tuoi database, per questo puoi fare:

sudo apt-get install postgresql pgadmin3 

Dopo, devi cambiare la password utente di Postgre, quindi fai:

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

Sul tuo file settings.py fai:

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

Extra:

Se vuoi creare il db usando la riga di comando puoi semplicemente fare:

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

Sul tuo file settings.py fai:

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

9

Può sembrare un po 'lungo, ma per me ha funzionato senza errori.

All'inizio, installa phppgadmin da Ubuntu Software Center.

Quindi esegui questi passaggi nel terminale.

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

Avvia il server Apache

sudo service apache2 start

Ora esegui anche questo nel terminale, per modificare il file apache.

sudo gedit /etc/apache2/apache2.conf

Aggiungi la seguente riga al file aperto:

Include /etc/apache2/conf.d/phppgadmin

Ora ricarica apache. Usa terminale.

sudo /etc/init.d/apache2 reload

Ora dovrai creare un nuovo database. Accedi come utente "postgres". Continua nel terminale.

sudo su - postgres

In caso di problemi con la password di "postgres", è possibile modificarla utilizzando la risposta qui https://stackoverflow.com/a/12721020/1990793 e continuare con i passaggi.

Ora crea un database

createdb <db_name>

Ora crea un nuovo utente per accedere successivamente a phppgadmin, fornendo una nuova password.

createuser -P <new_user>

Ora il tuo postgressql è stato configurato e puoi andare a:

http://localhost/phppgadmin/

e accedi utilizzando il nuovo utente che hai creato per visualizzare il database.


perché preoccuparsi di php? La domanda riguarda Django ...?
Sidhin S Thomas,

1
@SidhinThomas phpPgAdmin è uno strumento di amministrazione comune per PostgreSQL. Non dipende da quale lingua / framework viene eseguito il database.
Jibu James,

non c'è niente come il workbench MySQL per Postgres?
Sidhin S Thomas,

1
@SidhinThomas Sì, ci sono molti strumenti GUI simili a MySQL workbench. Dai un'occhiata qui. wiki.postgresql.org/wiki/…
Jibu James



3

Se stai usando Fedora 20, Django 1.6.5, postgresql 9.3. * E hai bisogno del modulo psycopg2, fai questo:

yum install postgresql-devel
easy_install psycopg2

Se sei come me, potresti avere problemi a trovare il ben documentato libpq-dev rpm ... Quanto sopra ha funzionato per me solo ora.


3

Stavo avendo lo stesso problema su Mac .

La soluzione era utilizzare solo PIP per installare tutto e toccare alcune cose.

Prima installa PIP da: https://pip.pypa.io/en/latest/

Quindi vuoi assicurarti che il percorso di pg_config sia nel tuo PATH (echo $ PATH), in caso contrario puoi modificare il tuo bash_profile:

vi /Users/<user>/.bash_profile

e aggiungi questa riga:

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

Se non sai dove si trova pg_config puoi usare lo strumento "Locate", ma assicurati che il tuo locate.db sia aggiornato (stavo usando un vecchio locate.db e usando percorsi che non esistono).

sudo /usr/libexec/locate.updatedb
locate pg_config

Quindi installa Django (se necessario) e psycopg2.

sudo pip install Django
sudo pip install psycopg2

E poi in settings.py (localhost: defaultport)

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

Saluta!


2
$ sudo apt-get install libpq-dev

Anno, questo risolve il mio problema. Dopo aver eseguito questo, eseguire: pip install psycopg2


0

Si noti che l'installazione di psycopg2tramite pip o setup.py richiede Visual Studio 2008 (più precisamente il file eseguibile vcvarsall.bat ). Se non si dispone dei diritti di amministratore per installarlo o impostare la variabile PATH appropriata su Windows, è possibile scaricare la libreria già compilata da qui .


Che dire di questo? Compilatore Microsoft Visual C ++ per Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.