Cara menyiapkan database PostgreSQL di Django

107

Saya baru mengenal Python dan Django.

Saya mengonfigurasi proyek Django menggunakan mesin basis basis data PostgreSQL, Tetapi saya mendapatkan kesalahan pada setiap operasi basis data. Misalnya ketika saya berlari manage.py syncdb, saya mendapatkan:

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

Bisakah seseorang memberi saya petunjuk tentang apa yang sedang terjadi?

André
sumber
11
Tampaknya cukup jelas: tidak ada modul bernama psycopg. Sudahkah Anda menginstalnya?
Daniel Roseman
Tidak, saya belum. Saya akan mencoba melakukannya
André
1
dapatkah seseorang mengetahui mengapa kita membutuhkan psycopg2 dengan django?
Amrit

Jawaban:

210

Anda perlu menginstal psycopg2pustaka Python.

Instalasi


Unduh http://initd.org/psycopg/ , lalu instal di bawah Python PATH

Setelah mengunduh, ekstrak tarball dengan mudah dan:

$ python setup.py install

Atau jika Anda ingin, instal dengan easy_install atau pip .

( Saya lebih suka menggunakan pip daripada easy_install tanpa alasan. )

  • $ easy_install psycopg2
  • $ pip install psycopg2

Konfigurasi


dalam pengaturan .py

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

- Petunjuk penginstalan lainnya dapat ditemukan di halaman unduhan dan halaman penginstalan .

Alireza Savand
sumber
2
Hai, Saya mengikuti instruksi Anda tetapi tampaknya saya harus membuat pasangan pengguna / pwd sebelum saya menggunakannya di settings.py?
Yulong
2
tapi saya mendapatkan ini psycopg2.OperationalError: fe_sendauth: no password suppliedsaat saya lari python manage.py syncdb. Saya menetapkan nama tabel acak dan nama pengguna.
Yulong
1
@RedRory Terima kasih, Mereka baik-baik saja sekarang;)
Alireza Savand
1
FYI: Pada Django 1.9 Anda dapat mengatakan: 'ENGINE': 'django.db.backends.postgresql',
powlo
1
Masalah yang saya hadapi dengan jawaban ini adalah bahwa django.db.backends.postgresqldos tidak berfungsi psycopg2. apa yang berhasil adalah django.db.backends.postgresql_psycopg2ujung belakang dan menghindari menentukan nomor port karena berubah setiap kali Anda memulai pgAdmin di windows
Mustapha-Belkacim
31

Pastikan juga Anda telah menginstal paket pengembangan PostgreSQL. Di Ubuntu Anda perlu melakukan sesuatu seperti ini:

$ sudo apt-get install libpq-dev
Dennis Bunskoek
sumber
21

Langkah demi langkah yang saya gunakan:

 - 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

Anda mungkin ingin menginstal alat grafik untuk mengelola database Anda, untuk itu Anda dapat melakukan:

sudo apt-get install postgresql pgadmin3 

Setelah itu, Anda harus mengubah kata sandi pengguna Postgre, lalu lakukan:

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

Pada file settings.py Anda, Anda melakukan:

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

Tambahan:

Jika Anda ingin membuat db menggunakan baris perintah, Anda dapat melakukannya:

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

Pada file settings.py Anda, Anda melakukan:

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

Ini mungkin tampak agak panjang, tetapi berhasil untuk saya tanpa kesalahan apa pun.

Pertama, Instal phppgadmin dari Ubuntu Software Center.

Kemudian jalankan langkah-langkah ini di terminal.

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

Mulai server apache

sudo service apache2 start

Sekarang jalankan ini juga di terminal, untuk mengedit file apache.

sudo gedit /etc/apache2/apache2.conf

Tambahkan baris berikut ke file yang dibuka:

Include /etc/apache2/conf.d/phppgadmin

Sekarang muat ulang apache. Gunakan terminal.

sudo /etc/init.d/apache2 reload

Sekarang Anda harus membuat database baru. Masuk sebagai pengguna 'postgres'. Lanjutkan di terminal.

sudo su - postgres

Jika Anda mengalami masalah dengan kata sandi 'postgres', Anda dapat mengubahnya menggunakan jawaban di sini https://stackoverflow.com/a/12721020/1990793 dan melanjutkan langkah-langkahnya.

Sekarang buat database

createdb <db_name>

Sekarang buat pengguna baru untuk masuk ke phppgadmin nanti, berikan kata sandi baru.

createuser -P <new_user>

Sekarang postgressql Anda telah disiapkan, dan Anda dapat pergi ke:

http://localhost/phppgadmin/

dan login menggunakan pengguna baru yang Anda buat, untuk melihat database.

Jibu James
sumber
kenapa repot dengan php? Pertanyaannya adalah tentang Django ...?
Sidhin S Thomas
1
@SidhinThomas phpPgAdmin adalah alat administrasi umum untuk PostgreSQL. Itu tidak tergantung pada bahasa / kerangka kerja apa yang digunakan database.
Jibu James
tidak ada yang seperti meja kerja MySQL untuk Postgres?
Sidhin S Thomas
1
@SidhinThomas Ya, ada banyak alat GUI yang mirip dengan meja kerja MySQL. Coba lihat di sini. wiki.postgresql.org/wiki/…
Jibu James
6

Anda dapat menginstal "psycopg" dengan perintah berikut:

# sudo easy_install psycopg2

Alternatifnya, Anda bisa menggunakan pip:

# pip install psycopg2

easy_install dan pip disertakan dengan ActivePython , atau diinstal secara manual dari situs proyek masing - masing .

Atau, cukup dapatkan penginstal Windows bawaan .

Sandro Munda
sumber
2
Atau sudo apt-get install python-psycopg2jika Anda menggunakan sistem Debian dan ingin menggunakan manajer paket daripada pip / easy_install.
Blair
4

Masalah langsungnya adalah Anda kehilangan modul psycopg .

aptwebapps
sumber
3

Jika Anda menggunakan Fedora 20, Django 1.6.5, postgresql 9.3. * Dan Anda memerlukan modul psycopg2, lakukan ini:

yum install postgresql-devel
easy_install psycopg2

Jika Anda seperti saya, Anda mungkin kesulitan menemukan libpq-dev rpm yang terdokumentasi dengan baik ... Hal di atas baru saja berfungsi untuk saya.

MIke Kennedy
sumber
3

Saya mengalami Masalah yang sama di Mac .

Solusinya adalah dengan hanya menggunakan PIP untuk menginstal semuanya, dan menyentuh beberapa hal.

Pertama instal PIP dari: https://pip.pypa.io/en/latest/

Kemudian Anda ingin memastikan jika path ke pg_config ada di PATH Anda (echo $ PATH), jika tidak Anda dapat mengedit bash_profile Anda:

vi /Users/<user>/.bash_profile

dan tambahkan baris ini:

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

Jika Anda tidak tahu di mana pg_config berada, Anda dapat menggunakan alat "menemukan", tetapi pastikan find.db Anda mutakhir (saya menggunakan find.db lama dan menggunakan jalur yang tidak ada).

sudo /usr/libexec/locate.updatedb
locate pg_config

Kemudian instal Django (jika diperlukan) dan psycopg2.

sudo pip install Django
sudo pip install psycopg2

Dan kemudian di settings.py (localhost: defaultport)

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

Salam!

Juan Pablo Arriagada Cancino
sumber
2
$ sudo apt-get install libpq-dev

Tahun, ini menyelesaikan masalah saya. Setelah menjalankan ini, lakukan: pip install psycopg2

Gregory
sumber
0

Harap dicatat bahwa penginstalan psycopg2via pip atau setup.py harus memiliki Visual Studio 2008 (lebih tepatnya file yang dapat dieksekusi vcvarsall.bat ). Jika Anda tidak memiliki hak admin untuk menginstalnya atau menyetel variabel PATH yang sesuai di Windows, Anda dapat mendownload library yang sudah dikompilasi dari sini .

Sergey Ivanov
sumber
Bagaimana dengan ini? Microsoft Visual C ++ Compiler untuk Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP