質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

887閲覧

djangoでデータベースにpostgresを使用したい

PythonYo

総合スコア1

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/07 14:56

前提・実現したいこと

djangoでアプリを作る勉強しています。
データベースにpostgresを使用したいと思っていますが、
うまくいかなくて困っています。

python3 manage.py runserver
を実行して、ブラウザでアプリを表示することもできました。
データベースを管理しようと
http://localhost:8000/admin/
を開きました。
djangoのログインページで
username と password を入力すると、

このサイトにアクセスできません localhost で接続が拒否されました。 次をお試しください 接続を確認する プロキシとファイアウォールを確認する ERR_CONNECTION_REFUSED

と表示され、サーバーがシャットダウンしてしまいます。
同様のアプリをsqliteで作成したときはこのような現象は起きませんでした。

どなたかご助言頂けましたら幸いです。

該当のソースコード settings.py

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'db_test', 'USER': 'u_test', 'PASSWORD' : 'newpassword', 'HOST' : 'localhost', 'PORT' : '5432', } }

該当のソースコード admin.py

from django.contrib import admin from .models import TodoModel # Register your models here. admin.site.register(TodoModel)

補足情報(FW/ツールのバージョンなど)

ログイン画面の入力値は、
コンソールにて
createsuperuser で入力したものです。

'NAME': 'db_test',
'USER': 'u_test',
'PASSWORD' : 'newpassword',
これらはコンソールにて
psql で設定しています。

バージョンは
python 3.7.0
django 3.0.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sukekeke0

2020/11/08 07:39

python3 manage.py runserverを実行した端末には何かエラーメッセージが出ていませんか?
PythonYo

2020/11/08 12:11

ありがとうございます。 コンソールには ``` @MacBook%python3 manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). November 07, 2020 - 13:09:49 Django version 3.0.6, using settings 'aaaproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. [07/Nov/2020 13:09:52] "GET /admin/ HTTP/1.1" 302 0 [07/Nov/2020 13:09:52] "GET /admin/login/?next=/admin/ HTTP/1.1" 200 1913 [07/Nov/2020 13:09:59] "POST /admin/login/?next=/admin/ HTTP/1.1" 302 0 @MacBook% ``` と表示されるだけです。 なにやらCookieには記録が残るようで、 このCookieを削除しない限り、 djangoのログインページにたどり着く前(直後?)に シャットダウンしてしまいます。
guest

回答1

0

PostgreSQLへアクセスするためによく使われるライブラリとして、「psycopg2-binary」があります。
Python仮想環境から「psycopg2-binary」をインストールして、設定ファイル(settings.py)のデータベース設定部分に定義してみてください。

terminal

1(venv~)$ pip install psycopg2-binary

USER/PASSWORDは、settings.pyには直接書かず、環境変数で渡すと良いです。
または、__init__.py に書くようにすると良いでしょう。
HOST/PORTは、特別な設定をしていなければ、下記のように省略も可能です。

python

1DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.postgresql_psycopg2', 4 'NAME': 'db_test', 5 'USER': os.environ.get('DB_USER'), 6 'PASSWORD': os.environ.get('DB_PASSWORD'), 7 'HOST': '', 8 'PORT': '', 9 } 10}

投稿2020/12/28 03:19

_whitecat_22

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PythonYo

2021/01/17 11:41

ご回答ありがとうございます。 返答が遅れて大変申し訳ございません。 ご回答通りやってみましたが、 結果は変わりませんでした。 psycopg2-binaryのバージョンは2.8.6です。 psycopg2をインストールしようをしましたが、 インストールできませんでした。 このことも関係しているのでしょうか。 ちなみに、requirements.txt は asgiref==3.3.1 dj-database-url==0.5.0 Django==3.0.6 gunicorn==20.0.4 psycopg2-binary==2.8.6 pytz==2020.5 sqlparse==0.4.1 whitenoise==5.2.0 となっています。 なにか改良すべき点があるでしょうか? よろしくお願いします。
_whitecat_22

2021/01/17 11:51

> psycopg2-binaryのバージョンは2.8.6です。 問題ありません。Djangoからですと、「~binary」を一般的に使うようですので、こちらのほうが良いです。 $ psql -U postgres ターミナルから、上記コマンドを入力すると、ユーザー:'postgres' でログインを試みて、パスワードの入力を求められます。 PostgreSQLの初期設定(インストール)時に登録したパスワードを入力して、ログインしてみてください。 ターミナルが以下のような表示になれば、PostgreSQL自体へのログインはできています。 postgres=# ※終了(ログアウト)するには、\q です。 ちなみに、PostgreSQL は幾つでしょうか。 もう一つ。http://127.0.0.1:8000/admin/ でアクセスしても同じですよね??
PythonYo

2021/01/24 07:14

ご回答ありがとうございます。 度々返答遅れて申し訳ございません。 PosgtgreSQLのバージョンは13.0です。 homebrewからインストールしています。 http://127.0.0.1:8000/admin/ でアクセスしても同じ結果でした。 $ psql -U postgres を入力すると、 postgres=# という表示になりました。 PostgreSQL自体へのログインはできているということなのですね。 ただ、パスワードの入力は求められませんでした。 これはわたしがパスワードの設定をしていないからでしょうか。 今回のアプリ作成に当たり、 ターミナル側(psql)からは何もアプローチしていないのですが、 こちらが側からも何か設定する必要があるのでしょうか? ひょっとして、settings.pyの DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'db_test', 'USER': os.environ.get('DB_USER'), 'PASSWORD': os.environ.get('DB_PASSWORD'), 'HOST': '', 'PORT': '', } } の'NAME', 'USER'とは、psqlのユーザー名、データベース名のことなのでしょうか?
_whitecat_22

2021/01/24 07:37

>これはわたしがパスワードの設定をしていないからでしょうか。 パスワード設定をしてないからだと思います。 (初期設定で、そんなことできましたっけ!?) >の'NAME', 'USER'とは、psqlのユーザー名、データベース名のことなのでしょうか? そうです、そうです! 通常は user: postgres password: postgresのパスワード(いずれも初期設定時)に指定したものです。
PythonYo

2021/01/24 13:48

ご回答ありがとうございます。 自分で努力してみようと思いますが、 もう少し質問させてください。 ①PostgrerSQLにはosのユーザーとデータベースのユーザーが あるそうですね(この辺りが根本的に分かってない)。 setthings.pyの'USER'はどちらのユーザーなのでしょうか? ②データベースの設定は、models.pyで class TodoModel(models.Model): title = models.CharField(max_length=100) memo = models.TextField() def __str__(self): return self.title のように設定しています。 しかしpsqlでも、CREATE TABLE を使ってデータベースを設定できますよね。 これは、両方に設定しなければならないのでしょうか? 現状ではpsqlでは何もしていません。
_whitecat_22

2021/01/24 22:33

①djangoのデータベース設定で使う'USER' (os.environ.get('DB_USER'))は、データベースのユーザーになります。  osにはデフォルトで、postgresとユーザーが設定されているそうです。  また、各書籍では”osのユーザーとリンクさせる”という意味の記述で、データベースのユーザーとして、'postgres'というユーザー名をcreateuserすると解説しています。  ややこしいですね。。  もちろん、別名でも登録できるようですが、私ははじめてからずっと書籍の通りに合わせてしまっています。 ②djangoのみで大丈夫です。  djangoのmodels.pyにデータベースのカラム名などを設定することにより、migrationという処理(python manage.py makemigrations⇒python manage.py migrate)で、この設定をデータベースやテーブルに反映させることができます。  psqlで直接行なうのは、ユーザーの登録(createuser)と、データベース名の登録(createdatabase)のみで大丈夫です。
PythonYo

2021/03/31 14:23

ようやく戻ってくることができました。 アドバイスのおかげで進展がありました。 posgresqlを利用してデータベースを使用できるようになりました。 本当に感謝いたします。 ただ問題があります。 djanogoのadminサイト Django administration にログインできなくなってしまいました。 このadminサイトの Username と Password は何を入力すればいいのでしょうか? python manage.py createsuperuser したときに設定した name と password を入力しましたがログインできませんでした。 settings.py の DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'USER': 'PASSWORD': 'NAME', 'PASSWORD' も同じものを入れています。 なにか問題あるのでしょうか?
_whitecat_22

2021/04/01 03:51

django adminのサイトは、djangoのcreatesuperuserコマンドで作成したユーザー名(もしくはメールアドレス)、パスワードでログインします。 postgresのものとは異なります。 ちなみにsettings.pyの'NAME'にはデータベース名、'USER'はpostgresのユーザー名、'PASSWORD'はpostgresのパスワードを指定します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問