2015-10-16 4 views
9

私はWebアプリケーションの1つにDjango ORMを使用しました。私はそれに非常に慣れています。今私はデータベースを必要とする新しい要件を持っていますが、Djangoが提供するものは何もありません。私はsqlalchemyのようなもう1つのORMを学ぶのに多くの時間を費やしたくありません。djangoプロジェクトを作成せずにDjango 1.8.5 ORMを使用するには?

私はまだ
from django.db import models
を行うと、モデルを作成することができると思うが、その後manage.pyせずにどのように私は、移行と同期をしますか?

+2

[スタンドアロンとしてDjango ORMを使用する]の複製があります(http://stackoverflow.com/questions/937742/use-django-orm-as-standalone) – user1797792

+2

質問は「use-django-orm-as - スタンドアロン "と" Djangoの一部だけを使用する?"と" djangoの専用のDBを使用して "しかし、答えは古いバージョンのdjangoです。この質問を閉じると、誰かが最新バージョンの答えを書いてそれを取得するまでに時間がかかります上の1,2番目の回答 –

+0

[CLIツールにdjangoを使用する]の複製があります(http://stackoverflow.com/questions/32088702/using-django-for-cli-tool) – e4c5

答えて

18

古いバージョンのDjangoで動作する多くの回答がありますが、Djangoは常に更新されており、私の研究ではDjango 1.8/1.9の実行可能な回答は見つからないため、自分自身をロールバックしなければなりませんでした。ここではあなたがそれを行う方法は次のとおりです。

プロジェクト構造:

├── data 
│   ├── __init__.py 
│   ├── migrations 
│   │   └── __init__.py 
│   └── models.py 
├── main.py 
├── manage.py 
└── settings.py 

dataディレクトリおよび移行ディレクトリが空__init__.pyファイルが含まれています。次のようにサンプルmodels.pyファイルの読み取り:

from django.db import models 

class User(models.Model): 
    name = models.CharField(max_length=255) 
    email = models.EmailField(max_length=255) 

manage.pyファイルは、一般的なDjangoのmanage.pyファイルです。ちょうどあなたが新鮮django-admin startprojectコマンドからそれをコピーした場合os.environ.setdefaultに設定PARAMを変更してください:データベース、INSTALLED_APPS、およびSECRET_KEY:

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 
    from django.core.management import execute_from_command_line 
    execute_from_command_line(sys.argv) 

settings.pyファイルには、3つの設定が必要です。 SQLiteのではないのDBのためのDjangoのドキュメントを参照してください。

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'sqlite.db', 
    } 
} 

INSTALLED_APPS = (
    'data', 
    ) 

SECRET_KEY = 'REPLACE_ME' 

本当のトリックは、あなたのモデルに対してコーディングすることができる場所になりますた、main.pyです。どうやらあなたは物事がこの2行で作業を取得するwsgiを使用する必要があります。

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

ここではサンプルmain.pyです:私は答えを探して

this postとともに
# Django specific settings 
import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 

### Have to do this for it to work in 1.9.x! 
from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 
############# 

# Your application specific imports 
from data.models import * 

#Add user 
user = User(name="someone", email="[email protected]") 
user.save() 

# Application logic 
first_user = User.objects.all()[0] 

print(first_user.name) 
print(first_user.email) 

This projectは役に立つ出発点でしたDjango 1.9用の作業コードでの私のプルリクエストがマージされたので、masnunのレポからコードを取得できます。より良い方法がわかっている場合は、プルリクエストを提出してください。

+1

この回答は最近のdjango-バージョン!ありがとう:) – user3595632

+0

は、魅力的に動作します。 – Chriz

+1

は、これはまだ1.10.1に関連していますか? – waspinator

1

Django 1.11 documentation on how the applications are loaded

最新のDjangoバージョンのプロジェクト構造について

|--myproject 
|--main.py 
|--manage.py 
|--myapp 
| |--models.py 
| |--views.py 
| |--admin.py 
| |--apps.py 
| |--__init__.py 
| |--migrations 
|--myproject 
| |--settings.py 
| |--urls.py 
| |--wsgi.py 
| |--__init__.py 

あなたはまだマイグレーションを実行するmanage.py必要があるだろうBE-なり、main.pyは、スタンドアロンスクリプトで

# main.py 
import os 
import django 
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' 
django.setup() 
from myapp.models import MyModel 
print(MyModel.objects.all()[0]) 
5
import os 
from django.conf import settings 
from django.apps import apps 

conf = { 
    'INSTALLED_APPS': [ 
     'Demo' 
    ], 
    'DATABASES': { 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
      'NAME': os.path.join('.', 'db.sqlite3'), 
     } 
    } 
} 

settings.configure(**conf) 
apps.populate(settings.INSTALLED_APPS) 

djangoのテスト1.11.x

+1

最後にこれは機能しました!ほとんどの回答がうまくいかず、私は 'django.core.exceptions.AppRegistryNotReady:Appsがまだロードされていません。' –

関連する問題