我们可以将此称为“独立 Django 表”
我现在还没有成功。
可以吗???
谢谢
如果您不知道“独立 Django 脚本”,请查看此 http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/
<小时/>2.这是我的代码:
from django.core.management import setup_environ
from sphinx_test import settings
setup_environ(settings)
import sys
sys.path.append('D:\zjm_code\sphinx_test')
from django.db import models
from djangosphinx.models import SphinxSearch,SphinxQuerySet
class File(models.Model):
name = models.CharField(max_length=200)
tags = models.CharField(max_length=200)
objects = models.Manager()
search = SphinxQuerySet(index="test1")
#class Meta:#<----------- 1
# app_label = 'sphinx_test'#<------ 2
我的问题是当我在 1 和 2 前面添加“#”时,错误是:
Traceback (most recent call last):
File "D:\zjm_code\sphinx_test\books\models.py", line 17, in <module>
class File(models.Model):
File "D:\Python25\Lib\site-packages\django\db\models\base.py", line 52, in __new__
kwargs = {"app_label": model_module.__name__.split('.')[-2]}
IndexError: list index out of range
当我删除 1 和 2 前面的“#”时,它不会打印任何内容,并且尚未创建表格。
为什么?
最佳答案
您链接的文章很好地解释了最简单的方法。
编辑:为了清晰起见,重新排列了此内容。
从全新应用开始,创建模型,同步数据库以创建表,然后使用独立脚本中的 setup_environ
函数。
当然,这是假设 myapp
在您的 PYTHONPATH
中。如果不是,您必须先将路径附加到您的应用程序,然后再尝试导入它:
#!/usr/bin/env python
from django.core.management import setup_environ
# If myapp is not in your PYTHONPATH, append it to sys.path
import sys
sys.path.append('/path/to/myapp/')
# This must be AFTER you update sys.path
from myapp import settings
setup_environ(settings)
from myapp.models import Foo, Bar
# do stuff
foo = Foo.objects.get(id=1)
bar = Bar.objects.filter(foo=foo.baz)
编辑 #2:响应 OP 更新的代码。您正在尝试从独立脚本中创建新模型,这不是正确的方法。独立脚本不应用于创建新模型或应用程序,而应用于引用现有数据。
因此,使用您的示例,您需要从项目内创建一个新应用程序,然后创建另一个脚本用作独立脚本。因此,我将使用 standalone.py
的创建作为示例。
D:\zjm_code\sphinx_test
的文件结构应如下所示:
sphinx_test
|-- __init__.py
|-- manage.py
|-- settings.py
`-- urls.py
因此,首先您需要从此项目文件夹中创建一个新应用程序。我们将其命名为 file_test
并使用 python manage.py startapp file_test
创建它。现在 D:\zjm_code\sphinx_test
的文件树应该如下所示:
sphinx_test
|-- __init__.py
|-- __init__.pyc
|-- file_test
| |-- __init__.py
| |-- models.py
| |-- tests.py
| `-- views.py
|-- manage.py
|-- settings.py
|-- settings.pyc
`-- urls.py
现在您可以在 file_test\models.py
中创建您的 File
模型:
from django.db import models
from djangosphinx.models import SphinxSearch,SphinxQuerySet
class File(models.Model):
name = models.CharField(max_length=200)
tags = models.CharField(max_length=200)
objects = models.Manager()
search = SphinxQuerySet(index="test1")
#class Meta:#<----------- 1
# app_label = 'sphinx_test'#<------ 2
创建此模型后,您可以在此处执行 python manage.pysyncdb
以在为此应用配置的数据库中创建模型表。
然后您可以创建 standalone.py
,它具有与您刚刚创建的 file_test.models.File
模型配合使用的所有逻辑:
#!/path/to/python
from django.core.management import setup_environ
import sys
sys.path.append('D:\zjm_code\sphinx_test')
from sphinx_test import settings
setup_environ(settings)
# NOW you can import from your app
from sphinx_test.file_test.models import File
f = File(name='test', tags='abc,xyz,', search='foo')
f.save()
# confirm the data was saved
if f.id:
print 'success!'
else:
print 'fail!'
您现在已经创建了一个独立脚本,可以与 Django ORM 交互,而无需运行 Web 服务器或测试服务器实例。这就是为什么它被认为是独立的,因为您创建的新脚本可以单独在命令行中执行。
关于python - 使用 django db api 创建表的最简单方法是什么,并基于 'Standalone Django scripts',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2211816/