วิธีตั้งค่าฐานข้อมูล PostgreSQL ใน Django


107

ฉันยังใหม่กับ Python และ Django

ฉันกำลังกำหนดค่าโครงการ Django โดยใช้แบ็กเอนด์เอ็นจิ้นฐานข้อมูล PostgreSQL แต่ฉันได้รับข้อผิดพลาดในการทำงานของฐานข้อมูลแต่ละครั้ง ตัวอย่างเช่นเมื่อฉันวิ่ง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
มีใครบอกได้ไหมว่าทำไมเราต้อง psycopg2 กับ django
Amrit

คำตอบ:


210

คุณต้องติดตั้งpsycopg2ไลบรารี Python

การติดตั้ง


ดาวน์โหลดhttp://initd.org/psycopg/จากนั้นติดตั้งภายใต้ Python PATH

หลังจากดาวน์โหลดแล้วให้แยก tarball และ:

$ python setup.py install

หรือถ้าคุณต้องการติดตั้งได้โดยทั้งeasy_installหรือpip

( ฉันชอบใช้ 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',
    }
}

- คำแนะนำการติดตั้งอื่น ๆ สามารถพบได้ที่หน้าดาวน์โหลดและติดตั้งหน้า


2
สวัสดีฉันทำตามคำแนะนำของคุณ แต่ดูเหมือนว่าฉันควรสร้างคู่ผู้ใช้ / pwd ก่อนที่จะใช้ใน settings.py?
Yulong

2
แต่ผมได้รับนี้เมื่อฉันทำงานpsycopg2.OperationalError: fe_sendauth: no password supplied python manage.py syncdbฉันตั้งชื่อตารางแบบสุ่มและชื่อผู้ใช้
Yulong

1
@RedRory ขอบคุณตอนนี้พวกเขาสบายดี;)
Alireza Savand

1
FYI: ใน Django 1.9 คุณสามารถพูดว่า: 'ENGINE': 'django.db.backends.postgresql',
powlo

1
ปัญหาที่ฉันมีกับคำตอบนี้คือไม่สามารถใช้django.db.backends.postgresqlงานpsycopg2ได้ สิ่งที่ใช้ได้ผลคือdjango.db.backends.postgresql_psycopg2แบ็คเอนด์และหลีกเลี่ยงการระบุหมายเลขพอร์ตเนื่องจากมีการเปลี่ยนแปลงทุกครั้งที่คุณเริ่ม pgAdmin บน windows
Mustapha-Belkacim


21

ทีละขั้นตอนที่ฉันใช้:

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

หลังจากนั้นคุณต้องเปลี่ยนรหัสผ่านผู้ใช้ 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': '',
    }
}

9

สิ่งนี้อาจดูยาวไปหน่อย แต่ก็ใช้ได้ผลสำหรับฉันโดยไม่มีข้อผิดพลาดใด ๆ

ตอนแรกติดตั้ง phppgadmin จาก Ubuntu Software Center

จากนั้นรันขั้นตอนเหล่านี้ในเทอร์มินัล

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/

และเข้าสู่ระบบโดยใช้ผู้ใช้ใหม่ที่คุณสร้างขึ้นเพื่อดูฐานข้อมูล


ทำไมต้องกังวลกับ php? คำถามเกี่ยวกับ Django ... ?
Sidhin S Thomas

1
@SidhinThomas phpPgAdmin เป็นเครื่องมือการดูแลระบบทั่วไปสำหรับ PostgreSQL ไม่ได้ขึ้นอยู่กับภาษา / เฟรมเวิร์กที่ฐานข้อมูลทำงาน
Jibu James

ไม่มีอะไรเช่น MySQL workbench สำหรับ Postgres?
Sidhin S Thomas

1
@SidhinThomas ใช่มีเครื่องมือ GUI มากมายที่คล้ายกับ MySQL workbench ลองดูที่นี่ wiki.postgresql.org/wiki/…
Jibu James

6

คุณสามารถติดตั้ง "psycopg" ด้วยคำสั่งต่อไปนี้:

# sudo easy_install psycopg2

หรือคุณสามารถใช้ pip:

# pip install psycopg2

easy_install และ pip มีอยู่ActivePythonหรือด้วยตนเองติดตั้งจากนั้น โครงการเว็บไซต์

หรือเพียงแค่รับตัวติดตั้ง Windows ที่สร้างไว้ล่วงหน้า


2
หรือsudo apt-get install python-psycopg2ถ้าคุณใช้ระบบ Debian และต้องการใช้ตัวจัดการแพ็คเกจแทน pip / easy_install
แบล


3

หากคุณใช้ Fedora 20, Django 1.6.5, postgresql 9.3. * และคุณต้องการโมดูล psycopg2 ให้ทำสิ่งนี้:

yum install postgresql-devel
easy_install psycopg2

หากคุณเป็นเหมือนฉันคุณอาจมีปัญหาในการค้นหา libpq-dev rpm ที่มีการบันทึกไว้อย่างดี ... ข้างต้นใช้ได้ผลกับฉันในตอนนี้


3

ผมมีปัญหาเดียวกันบน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" ได้ แต่ต้องแน่ใจว่า 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': '',
    }
}

ทักทาย!



0

โปรดทราบว่าการติดตั้งpsycopg2ผ่าน pip หรือ setup.py จำเป็นต้องมี Visual Studio 2008 (ไฟล์ปฏิบัติการvcvarsall.bat ที่แม่นยำยิ่งขึ้น) หากคุณไม่ได้มีสิทธิผู้ดูแลระบบเพื่อติดตั้งหรือตั้งค่าตัวแปรเส้นทางที่เหมาะสมใน Windows คุณสามารถดาวน์โหลดรวบรวมแล้วห้องสมุดจากที่นี่


อะไรประมาณนี้ Microsoft Visual C ++ Compiler สำหรับ Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.