Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不创建Django项目的情况下使用Django 1.8.5 ORM?_Python_Django_Orm - Fatal编程技术网

Python 如何在不创建Django项目的情况下使用Django 1.8.5 ORM?

Python 如何在不创建Django项目的情况下使用Django 1.8.5 ORM?,python,django,orm,Python,Django,Orm,我在我的一个web应用程序中使用了Django ORM,我对它非常满意。现在,我有了一个新的需求,它需要数据库,而不是Django提供的其他任何东西。我不想再花更多的时间学习像sqlalchemy这样的ORM 我想我仍然可以做 来自django.db导入模型 并创建模型,但如果没有manage.py我该如何进行迁移和同步?有很多答案适用于较旧版本的Django,但Django一直在不断更新,在我的研究中,我发现Django 1.8/1.9没有可行的答案,所以我不得不推出自己的答案。以下是您的操作

我在我的一个web应用程序中使用了Django ORM,我对它非常满意。现在,我有了一个新的需求,它需要数据库,而不是Django提供的其他任何东西。我不想再花更多的时间学习像sqlalchemy这样的ORM

我想我仍然可以做
来自django.db导入模型


并创建模型,但如果没有
manage.py
我该如何进行迁移和同步?

有很多答案适用于较旧版本的Django,但Django一直在不断更新,在我的研究中,我发现Django 1.8/1.9没有可行的答案,所以我不得不推出自己的答案。以下是您的操作方法:

项目结构:

├── data
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   └── models.py
├── main.py
├── manage.py
└── settings.py
data
目录和migrations目录包含空的
\uuuu init\uuuuu.py
文件。示例
models.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
中的设置参数:

#!/usr/bin/env python
# manage.py
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的数据库,请参阅Django文档:

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

INSTALLED_APPS = (
    'data',
    )

SECRET_KEY = 'REPLACE_ME'
真正的诀窍是在
main.py
中,在这里您可以针对您的模型进行编码。显然,您必须使用
wsgi
来处理这两行:

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
下面是一个示例main.py:

# main.py
# 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="someone@example.com")
user.save()

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

print(first_user.name)
print(first_user.email)
此外,还有一些有助于我找到答案的起点,我的pull请求与Django 1.9的工作代码合并,因此您现在可以从masnun的repo中获取代码。如果您知道更好的方法,请提交请求。

对于最新的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来运行迁移,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])
在django 1.11.x上测试这对我来说很有效:

import os
# replace project_name with your own project name
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
django.setup()
from core.models import Customer,Jobs,Payments

# Your script code

我必须添加
导入django
,然后这就起作用了。

Agree的可能重复,问题是“使用django orm作为独立的”和“仅使用django的某些部分?”以及“仅使用django的db部分”的重复,但如果我关闭此问题,答案是针对django的旧版本,要想写出最新版本的答案并将其排在第一或第二位,需要花费很多时间。这个答案的可能副本在最近的django版本中是完美的!!谢谢:)这仍然与1.10.1相关吗?@mattmc3它在
Django 1.9.7
中对我不起作用,我有这个错误
Django.core.exceptions.improverlyconfigured:COMPRESS\u ROOT默认为STATIC\u ROOT,请定义其中一个。你知道为什么吗?@trex-我刚刚克隆了repo,并通过1.10.2验证了它在Python3和Django版本上仍然对我有效。您是否修改了settings.py?从Django 2.0.5(Python3.5)开始,这个方法可以工作,但是我收到了关于重新加载模型的运行时警告。对于我的设置,一个更好的解决方案是用
django.setup()
替换两行
wsgi
。最后这一行成功了!大多数答案都不适用于,我得到的是“django.core.exceptions.AppRegistryNotReady:应用程序尚未加载”。这个答案以及上面@mattmc3的答案也适用于django 2.1。非常感谢!此文件将用作manage.py文件还是settings.py文件?
import os
# replace project_name with your own project name
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
django.setup()
from core.models import Customer,Jobs,Payments

# Your script code