如何在Django中设置PostgreSQL数据库

117

我刚接触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
不,我还没有。我会尝试去做。 - André
1
有人能告诉我为什么在Django中需要使用psycopg2吗? - Amrit
14个回答

225

你需要安装Python库psycopg2

安装


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

下载之后,轻松解压缩tarball并执行安装操作:

$ python setup.py install

如果您愿意的话,可以通过easy_installpip安装它。

(我无缘由地更喜欢使用pip。)

  • $ easy_install psycopg2
  • $ pip install psycopg2

配置


settings.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中使用它们之前,我应该先创建用户/密码对吗? - Yulong
2
当我运行 python manage.py syncdb 时,出现了 psycopg2.OperationalError: fe_sendauth: no password supplied 的错误提示。我设置了随机的表名和用户名。 - Yulong
1
@RedRory 谢谢,它们现在没问题了 ;) - Alireza Savand
2
FYI:从Django 1.9开始,您可以这样说:'ENGINE': 'django.db.backends.postgresql'。 - powlo
2
我对这个答案的问题在于,django.db.backends.postgresql不与psycopg2兼容。有效的方法是使用django.db.backends.postgresql_psycopg2后端,并避免指定端口号,因为在Windows上每次启动pgAdmin时端口号都会改变。 - Mustapha-Belkacim
显示剩余10条评论

31

还要确保您已安装了PostgreSQL开发包。在Ubuntu上,您需要执行以下操作:

$ sudo apt-get install libpq-dev

27

我使用的步骤:

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

接下来,您需要更改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': '',
    }
}

7
您可以使用以下命令安装“psycopg”:

# sudo easy_install psycopg2

或者,您可以使用pip:

# pip install psycopg2

ActivePython中已经包含了easy_install和pip,也可以从相应的项目网站手动安装。

或者,直接获取预构建的Windows安装程序


2
如果您使用的是 Debian 系统并且想要使用软件包管理器而不是 pip/easy_install,请执行 sudo apt-get install python-psycopg2 - Blair

6

这可能看起来有点冗长,但我按照以下步骤完成并没有出现任何错误。

首先,从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://dev59.com/72cs5IYBdhLWcg3wmlEK#12721020,然后继续下一步。 现在创建一个数据库。
createdb <db_name>

现在创建一个新用户以便稍后登录phppgadmin,提供一个新密码。
createuser -P <new_user>

您已经设置好了PostgreSQL,现在可以转到:

http://localhost/phppgadmin/

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


1
为什么要使用PHP?这个问题是关于Django的吗? - Sidhin S Thomas
1
@SidhinThomas phpPgAdmin 是 PostgreSQL 的常用管理工具。它不依赖于数据库运行的语言/框架。 - Jibu James
难道PostgreSQL没有类似MySQL Workbench的工具吗? - Sidhin S Thomas
1
@SidhinThomas 是的,有很多类似于MySQL Workbench的GUI工具。在这里看一下。https://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools - Jibu James

5

目前的问题似乎是您缺少了psycopg2模块。


4

如果您使用的是 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中(echo $ 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


1
从零开始创建一个使用PostgreSQL数据库的Django应用的步骤。
  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.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接