Cách thiết lập cơ sở dữ liệu PostgreSQL trong Django


107

Tôi mới sử dụng Python và Django.

Tôi đang định cấu hình một dự án Django bằng chương trình phụ trợ công cụ cơ sở dữ liệu PostgreSQL, Nhưng tôi gặp lỗi trên mỗi thao tác cơ sở dữ liệu. Ví dụ khi tôi chạy manage.py syncdb, tôi nhận được:

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

Ai đó có thể cho tôi một manh mối về những gì đang xảy ra?


11
Có vẻ khá rõ ràng: không có mô-đun nào có tên psycopg. Bạn đã cài đặt nó chưa?
Daniel Roseman

Không, tôi chưa. Tôi sẽ cố gắng làm điều đó
André

1
ai đó có thể cho biết tại sao chúng ta cần psycopg2 với django?
Amrit

Câu trả lời:


210

Bạn cần cài đặt psycopg2thư viện Python.

Cài đặt


Tải xuống http://initd.org/psycopg/ , sau đó cài đặt nó trong Python PATH

Sau khi tải xuống, dễ dàng giải nén tarball và:

$ python setup.py install

Hoặc nếu bạn muốn, hãy cài đặt nó bằng easy_install hoặc pip .

( Tôi thích sử dụng pip hơn easy_install mà không có lý do gì. )

  • $ easy_install psycopg2
  • $ pip install psycopg2

Cấu hình


trong cài đặt .py

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

- Các hướng dẫn cài đặt khác có thể tìm thấy tại trang tải xuốngtrang cài đặt .


2
Xin chào, tôi làm theo hướng dẫn của bạn nhưng có vẻ như tôi nên tạo cặp user / pwd trước khi sử dụng chúng trong settings.py?
Yulong

2
nhưng tôi nhận được điều này psycopg2.OperationalError: fe_sendauth: no password suppliedkhi tôi chạy python manage.py syncdb. Tôi đặt tên bảng và tên người dùng ngẫu nhiên.
Yulong

1
@RedRory Cảm ơn, họ đã ổn rồi;)
Alireza Savand

1
FYI: Kể từ Django 1.9, bạn có thể nói: 'ENGINE': 'django.db.backends.postgresql',
powlo

1
Vấn đề mà tôi gặp phải với câu trả lời này là django.db.backends.postgresqldos không hoạt động với psycopg2. những gì làm việc là django.db.backends.postgresql_psycopg2back-end và tránh xác định số cổng như nó thay đổi mỗi khi bạn khởi pgAdmin trên cửa sổ
Mustapha-Belkacim

31

Đồng thời đảm bảo rằng bạn đã cài đặt gói phát triển PostgreSQL. Trên Ubuntu, bạn cần làm như sau:

$ sudo apt-get install libpq-dev

21

Từng bước mà tôi sử dụng:

 - 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

Bạn có thể muốn cài đặt một công cụ đồ họa để quản lý cơ sở dữ liệu của mình mà bạn có thể làm:

sudo apt-get install postgresql pgadmin3 

Sau đó, bạn phải thay đổi mật khẩu người dùng Postgre, sau đó thực hiện:

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

Trên tệp settings.py của bạn, bạn thực hiện:

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

Thêm:

Nếu bạn muốn tạo db bằng dòng lệnh, bạn có thể thực hiện:

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

Trên tệp settings.py của bạn, bạn thực hiện:

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

9

Điều này có vẻ hơi dài dòng, nhưng nó hoạt động với tôi mà không có bất kỳ lỗi nào.

Lúc đầu, hãy cài đặt phppgadmin từ Trung tâm phần mềm Ubuntu.

Sau đó chạy các bước này trong thiết bị đầu cuối.

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

Khởi động máy chủ apache

sudo service apache2 start

Bây giờ cũng chạy nó trong terminal, để chỉnh sửa tệp apache.

sudo gedit /etc/apache2/apache2.conf

Thêm dòng sau vào tệp đã mở:

Include /etc/apache2/conf.d/phppgadmin

Bây giờ tải lại apache. Sử dụng thiết bị đầu cuối.

sudo /etc/init.d/apache2 reload

Bây giờ bạn sẽ phải tạo một cơ sở dữ liệu mới. Đăng nhập với tư cách người dùng 'postgres'. Tiếp tục trong thiết bị đầu cuối.

sudo su - postgres

Trong trường hợp bạn gặp sự cố với mật khẩu của 'postgres', bạn có thể thay đổi nó bằng cách sử dụng câu trả lời tại đây https://stackoverflow.com/a/12721020/1990793 và tiếp tục với các bước.

Bây giờ hãy tạo một cơ sở dữ liệu

createdb <db_name>

Bây giờ hãy tạo một người dùng mới để đăng nhập vào phppgadmin sau, cung cấp một mật khẩu mới.

createuser -P <new_user>

Bây giờ bài viết của bạn đã được thiết lập và bạn có thể truy cập:

http://localhost/phppgadmin/

và đăng nhập bằng người dùng mới mà bạn đã tạo, để xem cơ sở dữ liệu.


tại sao phải bận tâm với php? Câu hỏi là về Django ...?
Sidhin S Thomas

1
@SidhinThomas phpPgAdmin là một công cụ quản trị phổ biến cho PostgreSQL. Nó không phụ thuộc vào ngôn ngữ / khuôn khổ cơ sở dữ liệu chạy trên.
Jibu James

không có bất cứ điều gì giống như bàn làm việc MySQL cho Postgres?
Sidhin S Thomas

1
@SidhinThomas Có rất nhiều công cụ GUI tương tự như MySQL workbench. Hãy xem ở đây. wiki.postgresql.org/wiki/…
Jibu James

6

Bạn có thể cài đặt "psycopg" bằng lệnh sau:

# sudo easy_install psycopg2

Ngoài ra, bạn có thể sử dụng pip:

# pip install psycopg2

easy_install và pip được bao gồm trong ActivePython hoặc được cài đặt thủ công từ các trang web dự án tương ứng .

Hoặc, chỉ cần tải trình cài đặt Windows được tạo sẵn .


2
Hoặc sudo apt-get install python-psycopg2nếu bạn đang sử dụng hệ thống Debian và muốn sử dụng trình quản lý gói thay vì pip / easy_install.
Blair


3

Nếu bạn đang sử dụng Fedora 20, Django 1.6.5, postgresql 9.3. * Và bạn cần mô-đun psycopg2, hãy làm như sau:

yum install postgresql-devel
easy_install psycopg2

Nếu bạn giống tôi, bạn có thể gặp khó khăn khi tìm kiếm vòng tua libpq-dev được ghi chép đầy đủ ... Phần trên phù hợp với tôi.


3

Tôi đã gặp vấn đề tương tự trên Mac .

Giải pháp là chỉ sử dụng PIP để cài đặt mọi thứ và chạm vào một số thứ.

Đầu tiên hãy cài đặt PIP từ: https://pip.pypa.io/en/latest/

Sau đó, bạn muốn chắc chắn rằng đường dẫn đến pg_config có nằm trong PATH của bạn (echo $ PATH) hay không, nếu không, bạn có thể chỉnh sửa bash_profile của mình:

vi /Users/<user>/.bash_profile

và thêm dòng này:

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

Nếu bạn không biết pg_config ở đâu, bạn có thể sử dụng công cụ "định vị", nhưng hãy đảm bảo định vị.db của bạn được cập nhật (tôi đang sử dụng định vị cũ và sử dụng các đường dẫn không tồn tại).

sudo /usr/libexec/locate.updatedb
locate pg_config

Sau đó cài đặt Django (nếu cần) và psycopg2.

sudo pip install Django
sudo pip install psycopg2

Và sau đó trong settings.py (localhost: defaultport)

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

Greets!


2
$ sudo apt-get install libpq-dev

Năm, điều này giải quyết vấn đề của tôi. Sau khi thực hiện điều này, hãy thực hiện: pip install psycopg2


0

Xin lưu ý rằng cài đặt psycopg2qua pip hoặc setup.py yêu cầu phải có Visual Studio 2008 (chính xác hơn là tệp thực thi vcvarsall.bat ). Nếu bạn không có quyền quản trị để cài đặt nó hoặc đặt biến PATH thích hợp trên Windows, bạn có thể tải xuống thư viện đã được biên dịch từ đây .


Cái này thì sao? Trình biên dịch Microsoft Visual C ++ cho Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.