How to set up a PostgreSQL database in Django
Asked Answered
W

13

117

I'm new to Python and Django.

I'm configuring a Django project using a PostgreSQL database engine backend, But I'm getting errors on each database operation. For example when I run manage.py syncdb, I'm getting:

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

Can someone give me a clue on what is going on?

Wield answered 22/3, 2011 at 16:13 Comment(3)
Seems quite clear: there's no module named psycopg. Have you installed it?Tress
No, I haven't. I will try to do itCogency
can someone tell why do we need psycopg2 with django?Li
F
225

You need to install psycopg2 Python library.

Installation


Download http://initd.org/psycopg/, then install it under Python PATH

After downloading, easily extract the tarball and:

$ python setup.py install

Or if you wish, install it by either easy_install or pip.

(I prefer to use pip over easy_install for no reason.)

  • $ easy_install psycopg2
  • $ pip install psycopg2

Configuration


in settings.py

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

- Other installation instructions can be found at download page and install page.

Federica answered 22/3, 2011 at 16:13 Comment(14)
Hi, I follow your instruction but it seems I should create the user/pwd pair before I use them in the settings.py?Lush
@Lush you have to create an user for postgres, but password is not necessary.Federica
but I get this psycopg2.OperationalError: fe_sendauth: no password supplied when I run python manage.py syncdb. I set random table name and user name.Lush
@Lush I have never exprience such an error about it, but maybe this help you. groups.google.com/forum/?fromgroups#!topic/django-users/… Let me know if it solved the issue.Federica
I will try it. for now since i am trying a heroku deployment I will first find if there is a heroku-compatible way. but still thanks for the quick reply!Lush
Is it Python 3.3 compatible?Bess
If you want to use it with Django, No it's not. Django itself is not compatible with python3 yet, I think psycopg2 is compatible with python3, You have to compile it yourself. Look at this comment: initd.org/psycopg/articles/2012/03/29/psycopg-245-released/#c92Federica
make sure you have python-dev installed for psycopg2. Might be obvious to most people but it tripped me up on a recent server config.Swordsman
All psycopg2 links are deadPettit
what is "django & python PATH"?Wildfire
FYI: As of Django 1.9 you can say: 'ENGINE': 'django.db.backends.postgresql',Bluma
@Bluma Thanks for the comment, I have updated the post regarding to it.Federica
In Mojave (OS X 10.14) pip install psycopg2 did not initially work for me (python 3.7, django 2.2). See detailed solution here: https://mcmap.net/q/64541/-linking-not-working-in-homebrew-39-s-cmake-since-mojaveSandor
The problem that I had with this answer is that django.db.backends.postgresql dosn't work with psycopg2. what worked is django.db.backends.postgresql_psycopg2 back end and avoided specifying port number as it change every time you start pgAdmin on windowsMidgard
A
31

Also make sure you have the PostgreSQL development package installed. On Ubuntu you need to do something like this:

$ sudo apt-get install libpq-dev
Amoroso answered 16/8, 2012 at 14:12 Comment(0)
G
27

Step by step that I use:

 - 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

You may want to install a graphic tool to manage your databases, for that you can do:

sudo apt-get install postgresql pgadmin4 

After, you must change Postgre user password, then do:

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

On your settings.py file you do:

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

Extra:

If you want to create the db using the command line you can just do:

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

On your settings.py file you do:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'djangouser',
        'PASSWORD': 'myPasswordHere',
        'HOST': '',
        'PORT': '',
    }
}
Ga answered 28/9, 2014 at 16:52 Comment(0)
P
7

You can install "psycopg" with the following command:

# sudo easy_install psycopg2

Alternatively, you can use pip :

# pip install psycopg2

easy_install and pip are included with ActivePython, or manually installed from the respective project sites.

Or, simply get the pre-built Windows installer.

Pfeffer answered 22/3, 2011 at 17:20 Comment(1)
Or sudo apt-get install python-psycopg2 if you are on a Debian system and want to use the package manager rather than pip/easy_install.Sabulous
D
6

This may seem a bit lengthy, but it worked for me without any error.

At first, Install phppgadmin from Ubuntu Software Center.

Then run these steps in terminal.

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

Start the apache server

sudo service apache2 start

Now run this too in terminal, to edit the apache file.

sudo gedit /etc/apache2/apache2.conf

Add the following line to the opened file:

Include /etc/apache2/conf.d/phppgadmin

Now reload apache. Use terminal.

sudo /etc/init.d/apache2 reload

Now you will have to create a new database. Login as 'postgres' user. Continue in terminal.

sudo su - postgres

In case you have trouble with the password of 'postgres', you can change it using the answer here https://mcmap.net/q/45065/-how-can-i-change-a-postgresql-user-password and continue with the steps.

Now create a database

createdb <db_name>

Now create a new user to login to phppgadmin later, providing a new password.

createuser -P <new_user>

Now your postgressql has been setup, and you can go to:

http://localhost/phppgadmin/

and login using the new user you've created, in order to view the database.

Dotard answered 8/5, 2015 at 18:57 Comment(4)
why bother with php? The question is about Django ...?Waverly
@SidhinThomas phpPgAdmin is a common administration tool for PostgreSQL. It does not depend on what language/framework the database runs on.Dotard
isn't there anything like MySQL workbench for Postgres?Waverly
@SidhinThomas Yes there are a lot of GUI tools similar to MySQL workbench. Take a look here. wiki.postgresql.org/wiki/…Dotard
W
5

The immediate problem seems to be that you're missing the psycopg2 module.

Woolpack answered 22/3, 2011 at 16:16 Comment(0)
C
4

If you are using Fedora 20, Django 1.6.5, postgresql 9.3.* and you need the psycopg2 module, do this:

yum install postgresql-devel
easy_install psycopg2

If you are like me, you may have trouble finding the well documented libpq-dev rpm... The above worked for me just now.

Centrepiece answered 23/6, 2014 at 2:30 Comment(0)
H
3

I was having the same Issue on Mac.

The solution was to use only PIP to install everything, and touch some things.

First install PIP from: https://pip.pypa.io/en/latest/

Then you want to make sure if path to pg_config is in your PATH (echo $PATH), if not you can edit your bash_profile:

vi /Users/<user>/.bash_profile

and add this line:

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

If you don't know where pg_config is you can use the "locate" tool, but be sure your locate.db is up to date (i was using an old locate.db and using paths that does not exists).

sudo /usr/libexec/locate.updatedb
locate pg_config

Then install Django (if needed) and psycopg2.

sudo pip install Django
sudo pip install psycopg2

And then in settings.py (localhost:defaultport)

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

Greets!

Halvorson answered 2/9, 2014 at 17:39 Comment(0)
G
2
$ sudo apt-get install libpq-dev

Year, this solve my problem. After execute this, do: pip install psycopg2

Ga answered 20/4, 2014 at 14:24 Comment(0)
A
1

Steps to create a Django app with PostgreSQL database from scratch.

  1. Check if PostgreSQL is installed in your system. In your bash shell enter

    psql --version
    
  2. If PostgreSQL is installed jump to step 6.

  3. To install PostgreSQL -

    sudo apt-get install python3-dev libpq-dev
    
    sudo apt-get install postgresql postgresql-contrib
    
  4. By default PostgreSQL installation creates a special user named "postgres" that has all rights. To login to PostgreSQL

    sudo -u postgres psql
    

    To exit PostgreSQL session

    \q
    
  5. Now set password for "postgres" user.

    Login to PostgreSQL -

    sudo -u postgres psql
    

    In PostgreSQL interactive session enter -

    \password postgres
    
  6. Create PostgreSQL database.

    To create directly from bash shell -

    sudo -u postgres createdb your_db_name
    

    To create from PostgreSQL interactive session -

    createdb your_db_name
    

    To check if the database is created, list all databases using PostgreSQL command

    \l
    
  7. If you already have an existing Django project then jump to step 11. Otherwise create a virtual environment. I use virtualenv wrapper.

    mkvirtualenv your_project_name
    
  8. Create Django project.

    django-admin startproject your_project_name
    
  9. Cd to the project directory and create your app.

     python manage.py startapp your_app_name
    
  10. Install Django.

    pip install django
    
  11. Install Psycopg2. Psycopg2 is a PostgreSQL database adapter for Python. This is required for Django to connect with PostgreSQL.

    pip install psycopg2
    
  12. Update settings.py as follows

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'your_db_name',
            'USER': 'postgres',
            'PASSWORD': 'xxxxx',
            'HOST': 'localhost',
            'PORT': '',
        }
    }
    
  13. Run migration.

    python3 manage.py migrate
    
  14. Run Django server and visit localhost:8000

    python3 manage.py runserver 0.0.0.0:8000
    
  15. If required you can install pgadmin - a graphical client to view and manipulate PostgreSQL database schema and data.

Aggie answered 28/10, 2021 at 7:38 Comment(0)
B
0

Please note that installation of psycopg2 via pip or setup.py requires to have Visual Studio 2008 (more precisely executable file vcvarsall.bat). If you don't have admin rights to install it or set the appropriate PATH variable on Windows, you can download already compiled library from here.

Boykin answered 11/3, 2014 at 15:24 Comment(1)
What about this? Microsoft Visual C++ Compiler for Python 2.7 ==>> microsoft.com/en-us/download/details.aspx?id=44266Fez
U
0

This is one of the very good and step by step process to set up PostgreSQL in ubuntu server. I have tried it with Ubuntu 16.04 and its working.

https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-django-application-on-ubuntu-14-04

Udela answered 21/3, 2018 at 15:56 Comment(0)
A
-2

postgres runs on port 5432

specify this in settings.py

https://www.postgresql.org/docs/14/app-postgres.html

Astrogeology answered 27/6, 2022 at 17:52 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Coulee

© 2022 - 2024 — McMap. All rights reserved.