如何在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个回答

0

在Django中集成PostgreSQL

架构:Ubuntu和Nginx

sudo apt install libpq-dev postgresql postgresql-contrib

如果没有问题,systemctl status postgresql.service通常已经处于活动状态了。如果没有,请检查安装。

默认情况下,Postgres使用一种称为“对等身份验证”的认证方案来进行本地连接。基本上,这意味着如果用户的操作系统用户名john@example与有效的Postgres用户名john匹配,则该用户可以无需进一步身份验证即可登录。在Postgres安装期间,创建了一个名为postgres的操作系统用户,以对应于postgres管理用户。我们使用此用户执行管理任务。

sudo -u postgres psql

postgres=# create database example;
CREATE DATABASE
postgres=# create user john with password 'abcxyz';
CREATE ROLE
postgres=# ALTER ROLE john SET client_encoding TO 'utf8';
postgres=# ALTER ROLE john SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE john SET timezone TO 'UTC';
postgres=# GRANT ALL PRIVILEGES ON DATABASE example TO john;

Postgres现在已经设置好,Django可以连接并管理其数据库信息。

pip install psycopg2-binary不建议用于生产环境,因为psycopg2存在未修复的问题。

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'example',
        'USER': 'john',
        'PASSWORD': 'abcxyz',
        'HOST': 'localhost',
        'PORT': '5432',  can be left empty
    }
}

最后,使用这些基本的Django迁移命令来完成集成。

python manage.py makemigrations

python manage.py migrate

额外的TODO提示

强烈建议使用更好的方法来设置关键值,如NAME、USER和PASSWORD,而不是像数据库代码片段中所示那样使用纯文本。

一种方法是使用json文件来替换项目根目录之外的内容。因此,即使在意想不到的情况下尝试源代码劫持,您的关键认证详细信息也可能无法被获取。

假定已创建一个新的config.json文件,其中包含相应的键值对。

{
  "POSTGRES_DB": "example",
  "POSTGRES_USER": "john",
  "POSTGRES_PASSWORD": "abcxyz",
  "POSTGRES_HOST": "localhost",
  "POSTGRES_PORT": ""
}

将此代码放置在settings.py中以加载和使用config.json
import os
import json

with open('/path to your config.json file/') as config_file:
    config = json.load(config_file)

更新数据库配置以从config.json文件加载参数:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': config['POSTGRES_DB'],
        'USER': config['POSTGRES_USER'],
        'PASSWORD': config['POSTGRES_PASSWORD'],
        'HOST': config['POSTGRES_HOST'],
        'PORT': config['POSTGRES_PORT'],
    }
}

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

这个怎么样?Microsoft Visual C++ Compiler for Python 2.7 ==>> https://www.microsoft.com/en-us/download/details.aspx?id=44266 - Ajeeb.K.P

0

-2

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

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