2016-09-29 28 views
0

2つの別々のDjangoプロジェクトで同じデータベースを共有する必要があります。 project_1には、project_2(主に画像)で使用する必要のあるオブジェクトを作成するモデルがあります。2つのdjangoプロジェクトを同じデータベースで共有する方法

project_1_2のツリー構造は、次のとおりです。最善のアプローチである

project_1/ 
    manage.py 
    settings.py 
    project_1_app1/ 
     ... 
    ... 

project_2/ 
    manage.py 
    settings.py 
    project_2_app1/ 
     ... 
    ... 

EDIT:自分の開発環境でsqlite3を使用しています。

私は自分の2つのdjangoプロジェクトをスタンドアローンプロジェクトとして保ちたいと思います(両方とも、それぞれのリポジトリから安全にアップグレードできるように)。このようにして

# in project_1/settings.py 
import os 

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 
.. 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(PROJECT_ROOT, 'development.db'), 
    }, 
} 
... 
# in project_2/settings.py 
import os 

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 
.. 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(PROJECT_ROOT, 'development.db'), 
    }, 
} 
... 

、各プロジェクトには独自のdevelopment.db(私が共有する必要がある1)があります:

project_1/development.db 
project_2/development.db 

が、私はそれを共有するためにもっと何かをする必要があります(と推測ユニーク)。私にとって 最高のてproject_1 /パスdevelopment.dbを保つため、てproject_1/development.dbを指すようにDATABASESproject_2/settings.pyを設定することです。

+0

これらのプロジェクトに共通の機能やアプリがあるかどうか – devxplorer

+1

https://docs.djangoproject.com/en/1.10/topics/db/multi-db/ – madzohan

+1

[ボイラープレートプロジェクト](https://github.com/devxplorer/django-multi-instances)をご覧ください。私はこのアプローチを使用することをお勧めします。なぜなら、あなたはプロジェクト間でアプリケーションを共有する可能性が高いからです。 – devxplorer

答えて

3

settings.pyで同じデータベースをDATABASESに定義することができます。両方のデータベース・ユーザー(project_1_userproject_2_user)を使用したいデータベースに適切な権限を持っている必要があることを

# in project_1/settings.py 

DATABASES = { 
    'default': { 
     'NAME': 'common_db', 
     'ENGINE': 'django.db.backends.postgresql', 
     'USER': 'project_1_user', 
     'PASSWORD': 'strong_password_1' 
    }, 
} 

# in project_2/settings.py 

DATABASES = { 
    'default': { 
     'NAME': 'common_db', 
     'ENGINE': 'django.db.backends.postgresql', 
     'USER': 'project_2_user', 
     'PASSWORD': 'strong_password_2' 
    }, 
} 

注:データベースがPostgreSQLがあるのであれば、あなたはこのような何かを行うことができます。代わりに、両方のプロジェクトで同じユーザーを使用することもできます。

プロジェクトごとに1つ以上のデータベースを使用する場合は、docs for multiple databasesをご覧ください。

また、データを共有するため、機能を共有すると思います。たとえば、project_1_app1project_2_app1が同じ(またはそれに類する)ことをする場合、代わりにreusable appという単一のものになる可能性があります。

編集

あなたはsqlite3のを使用しているので、あなたが使用するパスが同じであることを確認する必要があります。

projects 
    project_1 
    settings.py 
    ... 
    project_2 
    settings.py 
    ... 

あなたはこれを試してみてください:

# project_1/settings.py 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(PROJECT_ROOT, 'development.db'), 
    }, 
} 


# project_2/settings.py 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(
      os.path.dirname(os.path.dirname(PROJECT_ROOT)), 
      'project_1', 
      'development.db' 
     ), 
    }, 
} 

これは、あなたが求める構造を与えるので、そのように、project_1project_2が兄弟であると仮定して。ただし、プロジェクトは両方とも「スタンドアロン」ではありません。 project_2は明らかにproject_1さんのデータベースに依存しています。

詳細については、os.pathモジュールをご覧ください。

+0

@alxsありがとうございます。私は自分のニーズをより良く説明するために質問を編集しました。 dbを同じパスに設定してもらえますか? – user123892

+0

@ user123892あなたがリクエストした余分な情報で答えを更新しました – alxs

+0

django.db.utils.ProgrammingError:別のユーザーとSUPERUSER権限で2番目のアプリケーションを移行しようとするとdjango_migrationsの権限が拒否されました –

関連する問題