django 的 ORM 单独使用
好了,上代码
1、不依赖 django project 单独使用
import os
from django.conf import settings
settings.configure(
#DATABASE_ENGINE = 'sqlite3',
#DATABASE_NAME= os.path.join( os.path.dirname(__file__), 'db\\sqlite3.db'),
DATABASES = {
'default': {
'ENGINE': 'sqlite3',
'NAME': os.path.join( os.path.dirname(__file__), 'db\\sqlite3.db'),
}
}
)
from django.db import models
class Person(models.Model):
class Meta:
db_table = 'persons'
app_label = 'test'
created_at = models.DateTimeField('created_at', auto_now_add = True)
updated_at = models.DateTimeField('updated_at', auto_now = True)
name = models.CharField("name", max_length = 20)
age = models.IntegerField("age")
p = Person()
p.name = "a"
p.age = 111
p.save()
2、依赖django project ,其实就是使用了 django project 中的 settings 和 models,这个很像rails 中的seed,哈哈
注意哈,下面代码中加 path 那段要理解下意思再加啊,不要乱加,我的seed.py位置在 #{django_project}/db/seed.py
import os
os.sys.path.append(os.path.join( os.path.dirname(__file__), '..')) #add project root directory to sys.path
import settings as project_settings
from django.conf import settings
settings.configure(
DATABASES = project_settings.DATABASES
)
from firstapp.models import *
p = Person()
p.name = "a"
p.age = 111
p.save()
3、使用 manage.py db_seeds ,类似于 rails 中的 rake db:seed 那样,呵呵,这个和2差不多,只不过是用了 django 的manage.py 来执行,更django
1)写 command文件,lib/django13/management/commands/db_seeds.py 文件内容如下,注意这里把 lib/django13 看成是 app ,像 django/contrib/auth 那样,management/commands 这个目录结构是死的,django从每个app的这个目录下下找 *.py ,文件名 db_seeds 就是 manage.py db_seeds 这里的
from django.core.management.base import NoArgsCommand
import settings
import os
class Command(NoArgsCommand):
help = "exec db/seeds.py file for add master data."
def handle_noargs(self, **options):
for app in settings.INSTALLED_APPS:
try:
exec("from %s.models import *" % app)
except:
pass
execfile(os.path.join(os.path.dirname(settings.__file__), 'db/seeds.py'))
2)settings.py 中 INSTALLED_APPS 里启用 lib.django13 这个app
INSTALLED_APPS = (
'django.contrib.auth',
......
'south',
'lib.django13',
)
3)项目目录/db/seeds.py 内容如下
print User.objects.all()
Last modified by vkill on2011/05/27 11:03