django更新数据库字段(Django如何更新数据库(django批量更新数据库))
大家好,今天小编来为大家解答django更新数据库字段这个问题,Django如何更新数据库(django批量更新数据库)很多人还不知道,现在让我们一起来看看吧!
Django里面怎么实现数据库视图啊 就是虚拟表
正经回答:先在数据库中建立好视图,然后django中建立对应的model。表所对应的类下面再建立一个Meta类,大致如下
classViewModel(models.Model):
"""这个model类对应你所建立好的视图"""
classMeta(object):
"""同理,该方法可用于使用mysql中任何已有的表,不仅是视图"""
db_table='your_view'#显式指定表名,也就是你建立的视图的名字
managed=false#默认是ture,设成falsedjango将不会执行建表和删表操作
#建立字段间的映射
#需要注意的是,必须设一个字段为主键
#不然django会自动创建一个id字段为主键,引发错误
百度知道越来越辣鸡了,全是答非所问的。
Django如何更新数据库(django批量更新数据库)
最简单的办法是。为数据库的表建立一个model。具体做法是这样子。
1.在settings.py里设置数据库连接方式。连接错误后面都没有办法
2.在models设置一个数据库表的对应数据结构,通常叫关系对象模型,所以叫model,它就是一个类。你可以用django-admin.py...probe,似乎是这个命令,就是一个数据库的探测命令,可以根据表,自动生成model的代码。当然如果你先写了model的代码就可以用syncdb命令生成数据库的表
3.在urls.py里设置一个URL的path,当浏览器访问这个path时就可以打开对应的view中的函数
4.在view里
4.1result=modelclass.objects.all()这个命令可以取出所有的记录
4.2然后你可以直接将结果传递给模板。由模板显示。这是最合理的办法
4.3在模板里{%forcolsinresult%}
4.4
cols.field1大约就是这样子。可能说的太粗。你对着教程看就知道了。
python + django 多表联合查询方法求教
先让我们回忆一下在第五章里的关于书本(book)的数据模型:
1
from django.db import models
class Publisher(models.Model):
name= models.CharField(max_length=30)
address= models.CharField(max_length=50)
city= models.CharField(max_length=60)
state_province= models.CharField(max_length=30)
country= models.CharField(max_length=50)
website= models.URLField()
def __unicode__(self):
return self.name
class Author(models.Model):
first_name= models.CharField(max_length=30)
last_name= models.CharField(max_length=40)
email= models.EmailField()
def __unicode__(self):
return u'%s%s'%(self.first_name, self.last_name)
class Book(models.Model):
title= models.CharField(max_length=100)
authors= models.ManyToManyField(Author)
publisher= models.ForeignKey(Publisher)
publication_date= models.DateField()
def __unicode__(self):
return self.title
如我们在第5章的讲解,获取数据库对象的特定字段的值只需直接使用属性。例如,要确定ID为50的书本的标题,我们这样做:
>>> from mysite.books.models import Book
>>> b= Book.objects.get(id=50)
>>> b.title
u'The Django Book'
但是,在之前有一件我们没提及到的是表现为ForeignKey或 ManyToManyField的关联对象字段,它们的作用稍有不同。
访问外键(Foreign Key)值
当你获取一个ForeignKey字段时,你会得到相关的数据模型对象。例如:
>>> b= Book.objects.get(id=50)
>>> b.publisher
<Publisher: Apress Publishing>
>>> b.publisher.website
u'http://www.apress.com/'
对于用`` ForeignKey``
来定义的关系来说,在关系的另一端也能反向的追溯回来,只不过由于不对称性的关系而稍有不同。通过一个`` publisher``对象,直接获取
books,用 publisher.book_set.all(),如下:
>>> p= Publisher.objects.get(name='Apress Publishing')
>>> p.book_set.all()
[<Book: The Django Book>,<Book: Dive Into Python>,...]
实际上,book_set只是一个 QuerySet(参考第5章的介绍),所以它可以像QuerySet一样,能实现数据过滤和分切,例如:
1
>>> p= Publisher.objects.get(name='Apress Publishing')
>>> p.book_set.filter(name__icontains='django')
[<Book: The Django Book>,<Book: Pro Django>]
属性名称book_set是由模型名称的小写(如book)加_set组成的。
访问多对多值(Many-to-Many Values)
多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。例如,这里是如何查看书籍的作者:
>>> b= Book.objects.get(id=50)
>>> b.authors.all()
[<Author: Adrian Holovaty>,<Author: Jacob Kaplan-Moss>]
>>> b.authors.filter(first_name='Adrian')
[<Author: Adrian Holovaty>]
>>> b.authors.filter(first_name='Adam')
[]
反向查询也可以。要查看一个作者的所有书籍,使用author.book_set,就如这样:
>>> a= Author.objects.get(first_name='Adrian', last_name='Holovaty')
>>> a.book_set.all()
[<Book: The Django Book>,<Book: Adrian's Other Book>]
这里,就像使用 ForeignKey字段一样,属性名book_set是在数据模型(model)名后追加_set。
更改数据库模式(Database Schema)
3
在我们在第5章介绍 syncdb这个命令时,我们注意到 syncdb仅仅创建数据库里还没有的表,它并不对你数据模型的修改进行同步,也不处理数据模型的删除。如果你新增或修改数据模型里的字段,或是删除了一个数据模型,你需要手动在数据库里进行相应的修改。这段将解释了具体怎么做:
当处理模型修改的时候,将Django的数据库层的工作流程铭记于心是很重要的。
如果模型包含一个未曾在数据库里建立的字段,Django会报出错信息。当你第一次用Django的数据库API请求表中不存在的字段时会导致错误(就是说,它会在运行时出错,而不是编译时)。
3
Django不关心数据库表中是否存在未在模型中定义的列。
Django不关心数据库中是否存在未被模型表示的表格。
1
改变模型的模式架构意味着需要按照顺序更改Python代码和数据库。
添加字段
1
当要向一个产品设置表(或者说是model)添加一个字段的时候,要使用的技巧是利用Django不关心表里是否包含model里所没有的列的特性。策略就是现在数据库里加入字段,然后同步Django的模型以包含新字段。
3
然而这里有一个鸡生蛋蛋生鸡的问题,由于要想了解新增列的SQL语句,你需要使用Django的
manage.py sqlall命令进行查看,而这又需要字段已经在模型里存在了。(注意:你并不是非得使用与Django相同的SQL语句创建新的字段,但是这样做确实是一个好主意,它能让一切都保持同步。)
3
这个鸡-蛋的问题的解决方法是在开发者环境里而不是发布环境里实现这个变化。(你正使用的是测试/开发环境,对吧?)下面是具体的实施步骤。
首先,进入开发环境(也就是说,不是在发布环境里):
在你的模型里添加字段。
运行 manage.py sqlall [yourapp]来测试模型新的 CREATE TABLE语句。注意为新字段的列定义。
开启你的数据库的交互命令界面(比如, psql或mysql,或者可以使用
manage.py dbshell)。执行 ALTER TABLE语句来添加新列。
使用Python的manage.py shell,通过导入模型和选中表单(例如,
MyModel.objects.all()[:5])来验证新的字段是否被正确的添加,如果一切顺利,所有的语句都不会报错。
3
然后在你的产品服务器上再实施一遍这些步骤。
启动数据库的交互界面。
5
执行在开发环境步骤中,第三步的ALTER TABLE语句。
将新的字段加入到模型中。如果你使用了某种版本控制工具,并且在第一步中,已经提交了你在开发环境上的修改,现在,可以在生产环境中更新你的代码了(例如,如果你使用Subversion,执行svn update。
重新启动Web server,使修改生效。
让我们实践下,比如添加一个num_pages字段到第五章中Book模型。首先,我们会把开发环境中的模型改成如下形式:
class Book(models.Model):
title= models.CharField(max_length=100)
authors= models.ManyToManyField(Author)
publisher= models.ForeignKey(Publisher)
publication_date= models.DateField()
**num_pages= models.IntegerField(blank=True, null=True)**
def __unicode__(self):
return self.title
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!