发布网友 发布时间:2024-09-17 03:37
共1个回答
热心网友 时间:2024-10-29 05:22
导读:很多朋友问到关于django查询数据怎么看的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
django怎么查询mongodb数据清单1.您可以尝试对MongoDB使用的样例JavaScript命令
varx="0";
x===0;
typeof({});
您不必成为一名JavaScript专家之后才开始使用MongoDB;这里提供几个有用的概念:
您可以使用对象字面量语法(objectliteralsyntax)创建对象,换句话说,会使用两个花括号(如varmyCollection={};)。
您可以使用方括号([])来创建数组。
除了数字、布尔值、null和未定义值以外,JavaScript中的其他所有值都是一个对象。
如果您想要了解关于JavaScript其他特性的更多信息,比如原型的面向对象的编程(OOP)、范围规则,及其函数式编程特性,请参阅参考资料。
MongoDB是一种无模式数据库,与关系型数据库完全相反。无模式数据库没有使用表格,而是使用由文档组成的集合。这些文档是使用对象字面量语法创建的,如清单2所示。
清单2.文档创建示例
varperson1={name:"JohnDoe",age:25};
varperson2={name:"JaneDoe",age:26,dept:115};
现在,请执行清单3中所示的命令来创建一个新集合。
清单3.创建集合
db.employees.save(person1);
db.employees.save(person2);
由于MongoDB具有无模式特性,所以person1和person2不必具有相同的列类型,甚至不必拥有相同的列编号。并且,MongoDB本身具有动态特性,所以它会创建employees而不是抛出一个错误。您可以通过find()方法检索文档。要获取employees中的所有文档,可以直接调用find(),无需使用任何参数,如清单4所示。
清单4.一个简单的MongoDB查询
db.employees.find();
//returns
[
{"_id":{"$oid":"4e363c4dcc93747e68055fa1"},
"name":"JohnDoe","age":25},
{"_id":{"$oid":"4e363c53cc93747e68055fa2"},
"name":"JaneDoe","dept":115,"age":26}
]
注意,_id等效于一个主键。要运行具体的查询,则需要使用键/值对传递另一个对象来指示您所要查询的内容,如清单5所示。
清单5.通过一个搜索参数进行查询
db.employees.find({name:"JohnDoe"});
//returns
[
{"_id":{"$oid":"4e363c4dcc93747e68055fa1"},
"name":"JohnDoe","age":25}
]
要查询年龄大于25岁的员工,请执行清单6中的命令。
清单6.查询年龄大于25岁的员工
db.employees.find({age:{'$gt':25}});
//returns
[
{"_id":{"$oid":"4e363c53cc93747e68055fa2"},
"name":"JaneDoe","dept":115,"age":26}
]
$gt是一个特殊操作符,表示大于。表1列出了其他修饰符。
表1.可以对MongoDB使用的修饰符
修饰符
描述
$gt大于
$lt小于
$gte大于或等于
$lte小于或等于
$in检查某个数组是否存在,类似于'in'SQL操作符。
当然,您也可以使用update()方法更新记录。您可以更新整条记录,如清单7所示。
清单7.更新整条记录
db.employees.update({
name:"JohnDoe",//Documenttoupdate
{name:"JohnDoe",age:27}//updateddocument
});
此外,您还可以使用$set操作符仅更新一个值,如清单8所示。
清单8.仅更新记录中的一个值
db.employees.update({name:"JohnDoe",
{'$set':{age:27}}
});
要清空集合,可以调用remove()方法,无需使用任何参数。例如,如果您想要从employees集合中移除JohnDoe,那么您可以执行清单9所示的操作。
清单9.从employees集合中移除JohnDoe
db.employees.remove({"name":"JohnDoe"});
db.employees.find();
//returns
[
{"_id":{"$oid":"4e363c53cc93747e68055fa2"},"name":"JaneDoe",
"dept":115,"age":26}
]
此内容对于刚开始使用MongoDB的您来说已经足够了。当然,您可以继续浏览官方网站,该网站提供了简洁的、基于Web的交互式mongodb命令提示符,以及指南和官方文档。请参阅参考资料。
回页首
将Django与MongoDB集成
有几个从Python或Django访问MongoDB的选项。第一个选项是使用Python模块,即PyMongo。清单10是一个简单的PyMongo会话,假设您已经安装了MongoDB,并且已经拥有一个在端口上运行的实例。
清单10.样例PyMongo会话
frompymongoimportConnection
databaseName="sample_database"
connection=Connection()
db=connection[databaseName]
employees=db['employees']
person1={"name":"JohnDoe",
"age":25,"dept":101,"languages":["English","German","Japanese"]}
person2={"name":"JaneDoe",
"age":27,"languages":["English","Spanish","French"]}
print"clearing"
employees.remove()
print"saving"
employees.save(person1)
employees.save(person2)
print"searching"
foreinemployees.find():
printe["name"]+""+unicode(e["languages"])
PyMongo允许您同时运行多个数据库。要定义一个连接,只需将数据库名字传递给连接实例。在本例中,Python词典代替了JavaScript对象字面量来创建新文档定义,而Python列表代替了JavaScript数组。find方法会返回一个您可以进行迭代的数据库游标对象。
语法的简易性使MongoDB命令行与包含PyMongo的运行命令之间的切换变得容易。例如,清单11展示了如何使用PyMongo运行一个查询。
清单11.使用PyMongo运行一个查询
foreinemployees.find({"name":"JohnDoe"}):
printe
您从Python调用MongoDB的另一个选项是MongoEngine,如果您使用过Django的内置ORM,那么您对此应该感到非常熟悉。MongoEngine是一个文档到对象的映射器,从概念上说,它与映射到ORM的映射器类似。清单12显示了一个使用MongoEngine的示例会话。
清单12.MongoEngine示例会话
frommongoengineimport*
connect('employeeDB')
classEmployee(Document):
name=StringField(max_length=50)
age=IntField(required=False)
john=Employee(name="JohnDoe",age=25)
john.save()
jane=Employee(name="JaneDoe",age=27)
jane.save()
foreinEmployee.objects.all():
printe["id"],e["name"],e["age"]
Employee对象继承自mongoengine.Document。在本示例中,使用了两种字段类型:StringField和IntField。与Django的ORM相似,要通过查询获得集合中的所有文档,请调用Employee.objects.all()。请注意,要访问惟一的对象ID,请使用"id"而非"_id"。
回页首
一个样例博客
现在要创建一个名为Blongo的简单博客。您将使用Python1.7、Django1.3、MongoDB1.8.2、MongoEngine0.4和HypertextMarkupLanguage(HTML)5。如果您想要重现我的精确设置,我习惯使用UbuntuLinux和FireFox。Blongo在网页加载后就会显示所输入的所有博客条目,并且允许对任何条目执行更新和删除操作,换句话说,允许进行所有的标准CRUD操作。Django视图拥有三个方法:index、update和delete。
层叠样式表(CSS)定义被引入一个单独的静态文件。相关内容我不想在此处赘述,您可以随意浏览下载部分中包含的源代码。
假设已安装好所需的所有工具,并且这些组件都能良好运行,那么请创建一个新的Django项目和必要的组件,如清单13所示。
清单13.创建Django博客项目的命令
$django-admin.pystartprojectblongo
$cdblongo
$django-admin.pystartappblogapp
$mkdirtemplates
$cdblogapp
$mkdirstatic
Django1.3的新增内容是一个已包含在Django中的贡献型应用程序,可使用它来改进静态文件的处理。通过向任何应用程序目录添加一个静态目录(例如,本例中的blogapp)并确保django.contrib.staticfiles包含在已安装应用程序中,Django可以查找到诸如.css和.js的静态文件,而无需使用其他任何方法。清单14显示了设置文件的代码行,这些代码行已经进行了相应修改(来自默认的settings.py文件),使博客应用程序能够正常运行。
Django如何进行数据访问查询fromjobs.modelsimportJob
fromdatetimeimportdatetime
q3=Job.objects.filter(pub_date__gte=datetime(2006,1,1))
q4=q3.filter(location__city__exact="Cleveland",
...location__state__exact="Ohio")
Django表关联对象及多表查询首先建立Student,Dpartment,Course,Stu_info表
一对多表关系数据的添加:
1.第一种方式就是跟之前的一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已经存在的值.
2.第二种方式是用的属性赋值的方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象的类型必须是department表的类实例对象
表关联对象的访问:
Student的模型类中我们有定义department的属性,所以当我们去访问的时候,可以直接通过student.department的形式去找到某个学生的所属学院是哪个.
那么如果我们也希望在在访问某个学院的实现对象的学生的时候改怎么访问呢???
表关联对象的访问:
可以在定义时设置related_name参数来覆盖foo_set的名称.
clear()从关联的对象集中删除所有的对象
多表查询----跨关联关系的查询:
Django提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:
它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。
django2.0,实现搜索数据库数据并显示在网页的功能我没环境,不方便帮你写代码,但可以告诉你思路:
你想用ajax方式查数据,第一步,你已经获取到了输入表单的的值,这很好。
第二步,你需要添加一个查询接口路由,和view,用来返回查询到后数据。
第三步,让前端js代码,用ajax的方式,请求你添加的查询路由地址,带上参数。
第四步,在路由对应的view代码中,获取通过url请求传过来的参数。
第五步,在view代码中,对参数进行检查,通过后,调用数据查询方法,获取结果集。
第六步,在view代码中,将结果集转为json(一般是json),返回。
第七步,ajax在收到返回结果后,将数据显示在网页中。
第八步,调整数据显示的样式,使之美观一点。
如有不明可以追问,或私信留言。
django怎么判断数据库的记录是否存在
我觉得楼上的回答好像有点问题。大家可以自行验证一下我是否正确。
用get查询的时候,查询不到内容的时候会抛出异常,同样查询结果多余1条的时候也会抛出异常。因此,不能使用get,而应该使用filter。
filer若是查询不到数据,会返回一个空的查询集,[]?type类型是:Queryset。
查询到多余一条的时候会,还是会返回一个包含多个对象的查询集。
所有用filter查询到的是否为'[]'来判断是否存在。
userinfo?=?Users.objects.filter(email?=?request.POST['email'])
if?userinfo.exists():
????print("yes,we?have?this?email")
else:
???print("sorry,email?is?not?register")
另外还可以使用count()这个方法,userinfo.count()=0的话表示不存在数据,大于0的话表示存在一条或多条。
还有就是楼上的答案:ifuerinfo:..........else:.......
结语:以上就是首席CTO笔记为大家整理的关于django查询数据怎么看的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~