python - 使用 django db api 创建表的最简单方法是什么,并基于 'Standalone Django scripts'

标签 python django

我们可以将此称为“独立 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/

相关文章:

python - 不带引号的 sql.Identifier

python - 在 PySolr 中验证连接

python-requests - 无法登录

django - Django 模板中的动态分页

python - 为 Django 单元测试创​​建测试数据库

javascript - 使用 Django 按钮来选择项目

Python:将 init args 干净地解压到成员变量中

Python 模块在终端中导入,但不通过 Unix Shell 导入

python - 如何在mongoDB中存储图像?

python - 属性错误: 'module' object has no attribute 'index'