django 的 ORM 单独使用 vkill'blog “技术本身没有太多价值,掌握了新的思考方式才是真的收获”

django 的 ORM 单独使用 - vkill'blog - “技术本身没有太多价值,掌握了新的思考方式才是真的收获”

django 的 ORM 单独使用

08:28 , vkill
到底啥时候使用呢,比如说我们开发网站时要写入基础数据这些的时候,用sql ? 太土了,还有关联表的数据sql可就麻烦了
好了,上代码

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

原文地址:https://www.cnblogs.com/lexus/p/2435647.html