【Django】数据库操作

1 settings.py的配置

之前博文里面以及提及过django数据库连接的配置

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
       # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'scrapytest1',
        'USER':'**',
        'PASSWORD':'**',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }
}


2 同步迁移

在blog/models.py中定义需要的模型:

class hot(models.Model):
    #id = models.AutoField(max_length=10)
    name = models.CharField(max_length=20)
    pwd = models.CharField(max_length=16)

注意,这里如果定义id的话,会提示错误,不能重复,因为Django在同步数据库的时候会自己产生一个自增变量id

运行 python manage.py syncdb 这里发现数据库中多了blog_hot的表

但是后来我发现有个字段长度写的不对,修改后重新运行上面命令,数据库没有更改

这里需要用 manage.py  makemigrations 和manage.py migrate 

3 操作

model对象保存和查询:

三种保存方式

【Django】数据库操作_第1张图片

2


3


上面三种方式都可以创建model并且存储

如果需要获取hot表的数据:

from blog.models import hot

# Create your views here.


def post_list(req,title):
 
    
hot1_user = hot.objects.all()   #相当于select * from blog_hot
#hot2_user = hot.objects.get(name='yang')  #select * from blog_hot where name='yang'

   return render_to_response('index.html',{'user':hot1_user})


 
  

get是获取一个对象的,如果是获取满足条件的一部分呢对象的话:

hot3_user = hot.objects.filter(name='yang')  
filter提供很多参数类型,需要的话可以查查
hot4_user = hot.objects.exclude(name='yang') #排除

数据库查询结果是queryset集合 ,这是涉及到数据库接口api:

(1) 支持切片 hot.objects.all()[:10]  可以节省空间

(2)常用方法 

.count 查询数量 .exists() 是否存在 len() 获取长度  list()强行变成列表 order_by()排序 reverse() 翻转

(3)链条查询

hot.objects.filter().filter() # 相当于and

hot.objects.filter().exclude()

(4) 获取queryset

hot_user= hot.objects.all()

hot_user[0]  


5 model中一对多、多对多

一对多关系:相当于外键的设置

class Hot_info(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    sex = models.CharField(max_length=5)

    def __unicode__(self):
        return self.name

class family(models.Model):
    mother = models.CharField(max_length=20)
    father = models.CharField(max_length=20)

    hot_info = models.ForeignKey(Hot_info)

    def __unicode__(self):
        return self.mother,self.father
多对多:

class Author(models.Model):
    name = models.CharField(max_length=30)

    def __unicode__(self):
        return self.name

class Book(models.Model):
    name = models.CharField(max_length=30)
    authors = models.ManyToManyField(Author)

    def __unicode__(self):
        return  self.name
多对多操作:

【Django】数据库操作_第2张图片

【Django】数据库操作_第3张图片

你可能感兴趣的:(python)