簡體   English   中英

如何在 Django 中設置 PostgreSQL 數據庫

[英]How to set up a PostgreSQL database in Django

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

有人可以告訴我發生了什么嗎?

您需要安裝psycopg2 Python 庫。

安裝


下載http://initd.org/psycopg/ ,然后在 Python PATH 下安裝

下載后,輕松解壓 tarball 並:

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

- 其他安裝說明可在下載頁面安裝頁面找到

還要確保您已安裝 PostgreSQL 開發包。 在 Ubuntu 上,您需要執行以下操作:

$ sudo apt-get install libpq-dev

我使用的一步一步:

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

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

# sudo easy_install psycopg2

或者,您可以使用 pip :

# pip install psycopg2

easy_install 和 pip 包含在ActivePython中,或者從各自項目站點手動安裝。

或者,只需獲取預構建的 Windows 安裝程序

這可能看起來有點冗長,但它對我有用,沒有任何錯誤。

首先,從 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://stackoverflow.com/a/12721020/1990793進行更改,然后繼續執行這些步驟。

現在創建一個數據庫

createdb <db_name>

現在創建一個新用戶稍后登錄 phppgadmin,提供一個新密碼。

createuser -P <new_user>

現在你的 postgressql 已經設置好了,你可以去:

http://localhost/phppgadmin/

並使用您創建的新用戶登錄,以查看數據庫。

直接的問題似乎是您缺少psycopg2模塊。

如果您使用 Fedora 20、Django 1.6.5、postgresql 9.3.* 並且需要 psycopg2 模塊,請執行以下操作:

yum install postgresql-devel
easy_install psycopg2

如果你像我一樣,你可能很難找到有據可查的 libpq-dev rpm... 以上剛剛對我有用。

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

問候!

$ sudo apt-get install libpq-dev

年,這解決了我的問題。 執行此操作后,執行: pip install psycopg2

從頭開始使用 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 數據庫模式和數據。

請注意,通過 pip 或 setup.py 安裝psycopg2需要具有 Visual Studio 2008(更准確地說是可執行文件vcvarsall.bat )。 如果您沒有管理員權限來安裝它或在 Windows 上設置適當的 PATH 變量,您可以從此處下載已編譯的庫。

這是在 ubuntu 服務器中設置PostgreSQL的非常好的一步一步的過程之一。 我已經用Ubuntu 16.04和它的工作進行了嘗試。

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

在 django 中集成 postgresql

Arch: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存在未修復的問題。

設置.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'],
    }
}

postgres 14 在端口 5433 上運行在 settings.py 中指定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM