【Django】数据库操作

来源:互联网 发布:成都培训java多少人 编辑:程序博客网 时间:2024/06/05 09:51

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对象保存和查询:

三种保存方式


2


3


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

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

<pre name="code" class="python">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.nameclass 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.nameclass Book(models.Model):    name = models.CharField(max_length=30)    authors = models.ManyToManyField(Author)    def __unicode__(self):        return  self.name
多对多操作:




0 0
原创粉丝点击