【问题标题】:How to set up a PostgreSQL database in Django如何在 Django 中设置 PostgreSQL 数据库
【发布时间】:2011-07-20 15:24:56
【问题描述】:

我是 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

谁能告诉我发生了什么?

【问题讨论】:

  • 似乎很清楚:没有名为 psycopg 的模块。你安装了吗?
  • 不,我没有。我会努力做到的
  • 有人能告诉我们为什么我们需要 psycopg2 和 django 吗?

标签: python django postgresql psycopg2 django-settings


【解决方案1】:

从头开始使用 PostgreSQL 数据库创建 Django 应用程序的步骤。

  1. 检查您的系统中是否安装了 PostgreSQL。在你的 bash shell 中输入

    psql --version
    
  2. 如果安装了 PostgreSQL,请跳转到第 6 步。

  3. 安装 PostgreSQL -

    sudo apt-get install python3-dev libpq-dev
    
    sudo apt-get install postgresql postgresql-contrib
    
  4. 默认情况下,PostgreSQL 安装会创建一个名为“postgres”的特殊用户,该用户拥有所有权限。登录 PostgreSQL

    sudo -u postgres psql
    

    退出 PostgreSQL 会话

    \q
    
  5. 现在为“postgres”用户设置密码。

    登录 PostgreSQL -

    sudo -u postgres psql
    

    在 PostgreSQL 交互式会话中输入 -

    \password postgres
    
  6. 创建 PostgreSQL 数据库。

    直接从 bash shell 创建 -

    sudo -u postgres createdb your_db_name
    

    从 PostgreSQL 交互式会话创建 -

    createdb your_db_name
    

    要检查数据库是否已创建,请使用 PostgreSQL 命令列出所有数据库

    \l
    
  7. 如果您已经有一个现有的 Django 项目,则跳转到第 11 步。否则创建一个虚拟环境。我使用 virtualenv 包装器。

    mkvirtualenv your_project_name
    
  8. 创建 Django 项目。

    django-admin startproject your_project_name
    
  9. Cd 到项目目录并创建您的应用程序。

     python manage.py startapp your_app_name
    
  10. 安装 Django。

    pip install django
    
  11. 安装 Psycopg2。 Psycopg2 是 Python 的 PostgreSQL 数据库适配器。这是 Django 连接 PostgreSQL 所必需的。

    pip install psycopg2
    
  12. 如下更新settings.py

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'your_db_name',
            'USER': 'postgres',
            'PASSWORD': 'xxxxx',
            'HOST': 'localhost',
            'PORT': '',
        }
    }
    
  13. 运行迁移。

    python3 manage.py migrate
    
  14. 运行 Django 服务器并访问 localhost:8000

    python3 manage.py runserver 0.0.0.0:8000
    
  15. 如果需要,您可以安装 pgadmin - 一个图形客户端来查看和操作 PostgreSQL 数据库架构和数据。

【讨论】:

    【解决方案2】:

    我使用的一步一步:

     - 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': '',
        }
    }
    

    【讨论】:

      【解决方案3】:

      直接的问题似乎是您缺少psycopg2 模块。

      【讨论】:

        【解决方案4】:

        这是在 ubuntu 服务器中设置 PostgreSQL 的非常好的一步一步的过程之一。我已经用Ubuntu 16.04 和它的工作进行了尝试。

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

        【讨论】:

          【解决方案5】:

          您需要安装psycopg2 Python 库。

          安装


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

          下载后,轻松解压压缩包:

          $ 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',
              }
          }
          

          - 其他安装说明见download pageinstall page

          【讨论】:

          • 您好,我按照您的指示进行操作,但似乎我应该先创建用户/密码对,然后再在 settings.py 中使用它们?
          • 但是当我运行python manage.py syncdb 时,我得到了这个psycopg2.OperationalError: fe_sendauth: no password supplied。我设置了随机的表名和用户名。
          • @RedRory 谢谢,他们现在很好;)
          • 仅供参考:从 Django 1.9 开始,您可以说:'ENGINE': 'django.db.backends.postgresql',
          • 我对这个答案的问题是django.db.backends.postgresql 不适用于psycopg2。有效的是django.db.backends.postgresql_psycopg2 后端并避免指定端口号,因为每次在 Windows 上启动 pgAdmin 时它都会更改
          【解决方案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://*.com/a/12721020/1990793 进行更改,然后继续执行步骤。

          现在创建一个数据库

          createdb <db_name>
          

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

          createuser -P <new_user>
          

          现在你的postgressql已经设置好了,你可以去:

          http://localhost/phppgadmin/
          

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

          【讨论】:

          • 为什么要使用 php?问题是关于 Django ...?
          • @SidhinThomas phpPgAdmin 是 PostgreSQL 的常用管理工具。它不依赖于数据库运行的语言/框架。
          • Postgres 没有类似 MySQL 工作台的东西吗?
          • @SidhinThomas 是的,有很多类似于 MySQL 工作台的 GUI 工具。看看这里。 wiki.postgresql.org/wiki/…
          【解决方案7】:

          我在 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.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': '',
              }
          }
          

          你好!

          【讨论】:

            【解决方案8】:

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

            yum install postgresql-devel
            easy_install psycopg2
            

            如果你和我一样,你可能很难找到有据可查的 libpq-dev rpm...以上刚刚对我有用。

            【讨论】:

              【解决方案9】:
              $ sudo apt-get install libpq-dev
              

              年,这解决了我的问题。 执行此操作后,执行以下操作: 点安装 psycopg2

              【讨论】:

                【解决方案10】:

                请注意,通过 pip 或 setup.py 安装 psycopg2 需要有 Visual Studio 2008(更准确地说是可执行文件 vcvarsall.bat)。如果您没有管理员权限来安装它或在 Windows 上设置适当的 PATH 变量,您可以从 here 下载已编译的库。

                【讨论】:

                【解决方案11】:

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

                $ sudo apt-get install libpq-dev
                

                【讨论】:

                  【解决方案12】:

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

                  # sudo easy_install psycopg2
                  

                  或者,您可以使用 pip :

                  # pip install psycopg2
                  

                  easy_install 和 pip 包含在 ActivePython 中,或者从 respective project 站点手动安装。

                  或者,只需获取pre-built Windows installer

                  【讨论】:

                  • sudo apt-get install python-psycopg2,如果您使用的是 Debian 系统并且想要使用包管理器而不是 pip/easy_install。