【问题标题】:what is the simplest way to create a table use django db api ,and base on 'Standalone Django scripts'使用 django db api 创建表的最简单方法是什么,并基于“独立 Django 脚本”
【发布时间】:2010-02-06 02:53:27
【问题描述】:

我们可以称之为“独立 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 前面的 '#' 时,它什么也不打印,并且还没有创建表。

为什么??

【问题讨论】:

  • 你必须在这里展示你的代码,否则他们不会知道你在说什么。

标签: python django


【解决方案1】:

您链接的文章很好地解释了最简单的方法。

编辑:为清晰起见重新安排。

从一个全新的应用开始,创建一个模型,同步数据库以创建表,然后在您的独立脚本中使用 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.py syncdb 以在您为此应用配置的数据库中创建模型表。

然后您可以创建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 交互,而无需运行网络服务器或测试服务器实例。这就是为什么它被认为是独立的,因为您创建的新脚本可以单独在命令行中执行。

【讨论】:

  • 'myapp.models' 是 py 文件还是由 'python manage.py startapp models' 制作的文件???
猜你喜欢
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2023-03-17
  • 2012-12-13
  • 2017-04-05
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多