NGi*_*Gix 4 python django orm django-models python-2.7
我是Django的新手,并且想在我的脚本中使用其ORM而不运行整个Django。我正在摸索如何配置它。StackOverflow上的搜索无济于事,因为答案未显示完整内容。
因此,我创建了一个小项目:
app.py
manage.py
orm/
__init__.py
models.py
Run Code Online (Sandbox Code Playgroud)
manage.py具有配置:
from django.conf import settings
settings.configure(
DATABASE_ENGINE = 'mysql',
DATABASE_NAME = 'db',
DATABASE_USER = 'admin',
DATABASE_PASSWORD = '',
DATABASE_HOST = 'localhost',
INSTALLED_APPS = ('orm')
)
Run Code Online (Sandbox Code Playgroud)
models.py:
from django.db import models
class Label(models.Model):
name = models.CharField(max_length=50) # required max_length
Run Code Online (Sandbox Code Playgroud)
最后是我的主文件app.py:
from django.conf import settings
from django.db import models
from orm.models import *
\# do database maniupaltions
Run Code Online (Sandbox Code Playgroud)
尽管在运行app.py之后,我收到以下错误消息:
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
我究竟做错了什么?
小智 8
所以你的问题是:
我想在脚本中使用Django的ORM而不运行完整的Django应用程序,如何配置它?
我将分享我使用Django 2.0.2对当前正在从事的项目所做的工作。
我建议您使用创建文件SetupDjangoORM.py:
import django
from django.conf import settings
settings.configure(
DATABASES={
'default': {
'ENGINE': '<your_engine>',
'NAME': '<database_name>',
'HOST': '<hostname_or_ip>',
'PORT': '<port>',
'USER': '<user>',
'PASSWORD': '<super_secret_password>',
}
},
INSTALLED_APPS=[
'<your_app>',
]
)
django.setup()
Run Code Online (Sandbox Code Playgroud)
您可以在settings.py文件中找到此信息。
然后,您可以在任何需要的地方导入它:
from . import SetupDjangoORM
Run Code Online (Sandbox Code Playgroud)
现在,您可以在脚本中使用Django模型(ORM)了。
这是更新版本,修复包括django.setup()线路和一些附加设置,包括:
管理.py
import os
import sys
import django
from django.conf import settings
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
INSTALLED_APPS = [
'orm',
]
DATABASES = {
'default': {
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'playground',
'USER' : 'admin',
'PASSWORD' : 'pasw',
'HOST' : 'localhost',
}
}
settings.configure(
INSTALLED_APPS = INSTALLED_APPS,
DATABASES = DATABASES,
)
django.setup()
if __name__ == "__main__":
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
Run Code Online (Sandbox Code Playgroud)
和app.py:
import manage
from orm.models import Label
if __name__ == '__main__':
Label.objects.create(name='test')
print(Label.objects.get(name='test'))
Run Code Online (Sandbox Code Playgroud)
希望有人会发现它有用。
你可以在这里找到所有信息
这适用于 Django 3.1 版
import django
from django.conf import settings
from myapp import myapp_defaults
settings.configure(default_settings=myapp_defaults, DEBUG=True)
django.setup()
# Now this script or any imported module can use any part of Django it needs.
from myapp import models
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2213 次 |
| 最近记录: |