我需要导入什么才能访问我的模型?

时间:2008-10-08 11:23:55

标签: python django

我想运行一个脚本来填充我的数据库。我想通过Django数据库API访问它。

唯一的问题是我不知道我需要导入什么才能获得对此的访问权。

如何实现这一目标?

5 个答案:

答案 0 :(得分:12)

导入您的设置模块

import os
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"

from mysite.polls.models import Poll, Choice

应该这样做。

答案 1 :(得分:6)

这就是我在一个数据加载脚本的顶部。

import string
import sys
try:
    import settings # Assumed to be in the same directory.
    #settings.DISABLE_TRANSACTION_MANAGEMENT = True
except ImportError:
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
sys.exit(1)

#Setup the django environment with the settings module.
import django
import django.core.management
django.core.management.setup_environ(settings)

from django.db import transaction

这应该在您在脚本中执行其他操作之前执行。

另一种方法是使用fixture和manage.py。虽然如果您只是尝试完成批量数据加载来初始化数据库,这应该可以正常工作。

另外,根据您的行为,您可能也可能不想在一次交易中完成所有操作。取消注释上面的交易行并构建与此类似的代码。

transaction.enter_transaction_management()
try:
    #Do some stuff
    transaction.commit()
finally:
    transaction.rollback()
    pass
transaction.leave_transaction_management()

答案 2 :(得分:5)

如果对项目目录中的shell脚本使用manage.py参数,则不必手动导入设置:

$ cd mysite/
$ ./manage.py shell
Python 2.5.2 (r252:60911, Jun 10 2008, 10:35:34) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from myapp.models import *
>>>

对于非交互式使用,您可以实施custom command并使用manage.py运行。

答案 3 :(得分:1)

最干净的解决方案是添加django扩展。

(virt1)tsmets@calvin:~/Documents/prive/rugby-club/proposal/kitu$ yolk -l
Django          - 1.3.1        - active 
Pygments        - 1.4          - active 
Python          - 2.6.5        - active development (/usr/lib/python2.6/lib-dynload)
django-extensions - 0.7.1        - active 
pip             - 1.0.2        - active 
setuptools      - 0.6c11       - active 
wsgiref         - 0.1.2        - active development (/usr/lib/python2.6)
yolk            - 0.4.1        - active 

然后扩展可能的命令列表,其中包括runscript命令。

答案 4 :(得分:0)

除了您自己的模型文件外,您还需要导入设置模块。