简介:本文的首席执行官注释将介绍Django如何查询多个表数据库的相关内容。我希望这对每个人都会有所帮助。让我们来看看。
将数据库路径放在配置中。然后在模块中,选择与相应模型相关联的相应库。
您还可以在表中指定字段名称。此外,如果上述方法不容易使用,则还可以自己连接数据库并自己管理。
Django的数据库连接未连接到池塘。每个访问是连接一次,并且效率很低。
选择“开始”菜单→程序→[管理SQL Server 2008]→[SQL Server Management Studio]命令,打开[SQL Server Management Studio]窗口,然后使用Windows或SQL Server身份验证来建立连接。
在[对象资源管理器]窗口中展开服务器,然后选择[数据库]节点
右 - 单击[数据库]节点,从pop -up快捷方式菜单中选择[新数据库]命令。
执行上述操作后,[新数据库]对话框将弹出。对话框和左侧有3个选项,即[常规],[选项]和[文件组]。完成设置后这三个选项,数据库的创建已完成。
输入数据库的名称,以在[数据库名称]中创建一个新数据库。例如,这是“新数据库”。
在文本框中输入新数据库的所有者,例如sa.cording,以使用数据库,选择或禁用[全文索引]复选框。
在[数据库文件]列表中包括两行,一个是数据库文件,另一个是日记文件。ADD或通过单击下面的[add]和[删除]按钮删除数据库文件。
切换到[可选页面],您可以在其中设置数据库的排序规则,恢复模式,兼容性级别和其他属性。
切换到[文件组]页面,您可以在此处添加或删除文件组。
完成上述操作后,单击[确定]按钮以关闭[新数据库]对话框。在这一点上,成功创建了“新数据”数据库。可以在[Object Resource Manager中看到新构建的数据库] 窗户。
如果您觉得自己使用自己的ORM来查询。直接获取数据库连接,然后执行SQL语句。
def my_custom_sql():从django.db导入连接,transaction cursor = connect.cursor()#data修改操作-submit requiend cursor.execute.execute(“ update bar set foo = foo = 1 with with white baz raz])trassaction.commit_unless_managed()操作,无需提交cursor.execute(“从bar where where bar =%s”,[self.baz])行= cursor.fetchone()
多-DATA
来自django.db import connectionscursor = connections ['my_db_alias']。光标()#your代码... transaction.commit_unless_managed(use ='my_db_alias')
通常我们不需要手动致电
transaction.commit_unless_maned(
), 我们做得到:
baz =%s“,[value])row = cursor.fetchone()return render_to_response('template.html',{'row':row':row})
让我们回忆第5章中有关书籍(书)的数据模型:
1
来自django.db导入模型
类出版商(Models.Model):
name = models.charfield(max_length = 30)
地址= model.Charfield(max_length = 50)
city = models.charfield(max_length = 60)
state_provring = model.charfield(max_length = 30)
country = models.charfield(max_length = 50)
网站= models.urlfield()
def __unicode __(self):
返回self.name
班级作者(Models.Model):
first_name = models.charfield(max_length = 30)
last_name = models.charfield(max_length = 40)
电子邮件= models.emailfield()
def __unicode __(self):
返回u'%s%s'%(self.first_name,self.last_name)
课程(Models.Model):
title = models.charfield(max_length = 100)
作者= model.manytomanyfield(作者)
publisher = models.foreignkey(发布者)
publication_date = model.datefield()
def __unicode __(self):
返回self.title
例如,在第5章的解释中,数据库对象的特定字段的值只需要直接使用属性。例如,要确定具有ID的书的标题,我们要这样做:这样做:
来自mysite.books.models导入书籍
b = book.objects.get(id = 50)
B.神经
你的django书'
但是,有一个相关的对象字段,我们没有提及它是外国基金会或Manytomanyfield,它们的影响略有不同。
访问密钥的价值(外键)
当您获得外国键字段时,您将获得相关的数据模型对象。例如:
b = book.objects.get(id = 50)
B.Publisher
出版商:Apress Publishing
b.publisher.website
你''
对于``外国人''
就定义的关系而言,关系的另一端也可以反向追溯,但是由于不对称之间的关系,它略有不同。通过``出版商''的对象,直接
书籍,使用Publisher.book_set.all(),如下:
p = publisher.objects.get(name ='apuse Publishing')
p.book_set.all()
[巴斯:django书,书:潜入蟒蛇,...]
实际上,book_set只是一个QuerySet(请参阅第5章的引入),因此它可以实现数据过滤和除法,例如QuerySet,例如:
1
p = publisher.objects.get(name ='apuse Publishing')
p.book_set.filter(name__icontains ='django')
[书:Django书,书:Pro Django]
属性名称book_set由小写(例如book)和_set组成。
访问多对多价值)
多头键和外部密钥是相同的,但是我们正在处理QuerySet而不是模型实例。例如,如何在此处查看本书的作者:
b = book.objects.get(id = 50)
b.authors.all()
[作者:Adrian Holovaty,作者:Jacob Kaplan-Moss]
b.authors.filter(first_name ='adrian')
[作者:Adrian Holovaty]
b.authors.filter(first_name ='adam')
[]
也可以是反向查询。要查看作者的所有书籍,请使用funer.book_set,AS:
a = rution.objects.get(first_name ='admin',last_name ='holovaty'))
a.book_set.all()
[书:django书,书:阿德里安的另一本书]
在这里,就像使用foreferkey字段一样,属性名称book_set是在数据模型(模型)名称之后添加的。
更改数据库模式(数据库架构)
3
当我们在第5章中介绍SynCDB命令时,我们注意到SynCDB创建了数据库中没有的表。它没有同步数据模型的修改,也没有处理数据模型的删除。如果您添加或修改数据模型中的字段或删除数据模型,则需要在数据库中手动修改它。本段将解释特定的:
在处理模型修改时,重要的是要记住Django数据库层的工作流程。
如果该模型包含在数据库中尚未建立的字段,则Django将报告错误的信息。当您首次使用DJANGO数据库API请求表时会导致错误(也就是说,它将在运行时造成错误,而不是编译))。
3
Django不在乎数据库表中的模型中是否有未定义的列。
Django不在乎数据库中的模型是否尚未表示形式。
1
更改模型的模型体系结构意味着需要按顺序更改Python代码和数据库。
添加字段
1
当您想将字段添加到产品设置表(或模型)时,要使用的技术是使用Django来不关心模型中的列的特征是否不关心。该策略是在该模型中添加字段数据库,然后同步Django模型以包含新字段。
3
但是,这里存在鸡蛋和鸡肉的问题。因为您想知道新添加的SQL语句,所以您需要从中使用Django
查看了manage.py sqlass命令,这需要模型中存在该字段。(注意:您不必使用与Django相同的SQL语句来创建一个新字段,但这确实是一个好主意,这可以使所有内容保持同步。)
3
解决此鸡肉蛋的问题的解决方案是在开发人员环境中而不是发布环境中实现这一变化。(您正在使用测试/开发环境,对吗?)以下是特定的实现步骤。
首先,输入开发环境(即在发行环境中):
将字段添加到您的模型中。
运行manage.py sqlall [yourawp]测试新的创建表语句。请注意新字段的定义。
打开您的数据库交互式命令接口(例如,PSQL或MySQL,或者您可以使用
manage.py dbshell)。执行Alter表语句以添加新列。
使用python的manage.py shell导入模型并选择表单(例如,例如,
mymodel.objects.all()[:5])验证是否正确添加了新字段。如果一切顺利,所有句子都不会报告错误。
3
然后在您的产品服务器上实现这些步骤。
启动数据库的交互式接口。
5
在开发环境的第三步中执行ALTE表语句。
将新字段添加到模型中。如果您使用控制工具的特定版本,并且在第一步中,您在开发环境中进行了修改。现在,您可以在生产环境中更新代码(例如,如果使用颠覆,请执行SVN执行SVNUPDATE。
重新启动Web服务器,以便修改生效。
让我们练习,例如在第5章中将num_pages字段添加到书籍模型中。首先,我们将在开发环境中将模型更改为以下形式:
课程(Models.Model):
title = models.charfield(max_length = 100)
作者= model.manytomanyfield(作者)
publisher = models.foreignkey(发布者)
publication_date = model.datefield()
?
def __unicode __(self):
返回self.title
第一个构建学生,分区,课程,stu_info表
添加一对多表的关系数据:
1.第一种方法是将其添加为上一个方法。应该注意的是,外键的值必须是关联表中存在的存在。
2.第二种方法是属性分配的方法,因为我们具有模型类中部门的属性,并且该属性的对象的类型必须是部门表类型的实例对象
访谈与对象相关的对象:
我们具有定义学生类别类别的部门的属性,因此,当我们访问它时,我们可以直接找到可以通过Student.Deppartment的形式直接找到学生附属学院的大学。
那么,如果您拜访访问一所大学的学生时我们也想改变呢?
访谈与对象相关的对象:
您可以在定义期间设置相关的_name参数,以涵盖foo_set的名称。
clear()将所有对象集中在关联对象
多桌查询----交叉关系查询:
Django提供了一种强大而直观的方式来“处理”查询中相关关系。它会自动帮助您处理后台加入。如果您想跨越关系,则只需要使用关联的模型字段的名称并使用双重字段的行进行分开,直到您想要的字段:
它也可以反向起作用。要引用“反向”关系,您只需要使用模型的小写字母的名称即可。
结论:以上是主要CTO的相关内容的摘要,请注意Django如何查询多个表数据库的数据库。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?