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)
运行 python manage.py syncdb 这里发现数据库中多了blog_hot的表
但是后来我发现有个字段长度写的不对,修改后重新运行上面命令,数据库没有更改
这里需要用 manage.py makemigrations 和manage.py migrate
3 操作
model对象保存和查询:
三种保存方式
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
多对多操作: