×

django orm

django orm(django中的orm中怎么对筛选结果去重)

admin admin 发表于2023-08-29 15:12:07 浏览41 评论0

抢沙发发表评论

本文目录

django中的orm中怎么对筛选结果去重

版权归作者所有,任何形式转载请联系作者。作者:petanne(来自豆瓣)来源:__gt 大于__gte 大于等于__lt 小于__lte 小于等于__in 存在于一个list范围内__startswith 以...开头__istartswith 以...开头 忽略大小写__endswith 以...结尾__iendswith 以...结尾,忽略大小写__range 在...范围内__year 日期字段的年份__month 日期字段的月份__day 日期字段的日__isnull=True/False

django orm创建数据表

Django里面,管理数据库和sqlarchemy类似,也是通过orm框架来实现的。所有的数据库的建立,都是在model.py里面通过类来实现的。

首先看看如何创建一个单表:

a. 先定义一个类,继承models.Model, 然后根据需求定义参数,这些参数的类型和变量后面会进一步阐述

models.py

from django.db import modelsclass UserInfo(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=64)

b. 注册app

settings.py

INSTALLED_APPS = 

c.执行命令。 第一条命令会生成一个初始化文件,第二个命令会生成对应的表

python manage.py  makemigrationspython manage.py  migrate

这样,就在PyCharm自带的sqlite数据库里面成功的生成了一个app01_UserInfo的表。这个表默认会有一个自增的id作为主键,另外两个字段是我们通过类创建的。

d. 如果希望使用mysql,因为Django默认使用了MySqldb模块,这个在3.0版本里面不存在,会直接报错。我们需要改为pymysql的模块,方法如下:

在project同名文件夹下的__init__文件中添加如下代码即可:

import pymysql

pymysql.install_as_MySQLdb()

2. 对于单表的增删改查询

查询

获取所有结果,获取到的结果是一个QuerySet的类似列表的对象,每一个元素本身又是一个对象,包括了id,name,password等属性。

obj = models.UserInfo.objects.all()

《QuerySet 》

可以通过filter进行过滤,相当于sql的where语句,因为结果也是QuerySet,因此需要再使用first()获取第一个值

obj = models.UserInfo.objects.filter(id=nid).first()

增加

models.UserInfo.objects.create(username=u,password=p,user_group_id=3)

删除,可以在filter的基础上进行删除

models.UserInfo.objects.filter(id=nid).delete()

修改,有两种常见方式

第一个方式

models.UserInfo.objects.filter(id=nid).update(username=u,password=p)

第二个方式

obj=models.UserInfo.objects.filter(id=nid)obj.username=uobj.save()

Django的orm中get和filter的不同

get得到的是一个model对象,filter得到的是一组model对象,类型是queryset,是一个django定义的,可迭代的,可以当作是一个list操作,每个索引都是一个model对象。get如果满足的条件大于一个的时候,会报错#有点类似于如下:get相当与fetchone()filter相当与fetchall()

django orm 怎么对现有的表结构操作

django orm 怎么对现有的表结构操作首先你要知道如何在视图里渲染模板,另外得要看你用的是什么数据库,以及你是否使用django的orm。拿mysql为例,如果你只需要从现有数据库中查询数据并显示,那么使用MySQLdb模块即可,查询出来的数据和模板进行渲染,之后返回渲染后的模板对象即可。  sqlalchemy使用上有两个层次,1是使用sql expression, 说白可以让你用python写sql, 2是它的orm, orm是使用session的,自行管理session生存期,自行在多个过程中传递session,自行管理事务。写法上是通常的transaction script(java常说的贫血的domain model)模式。实际编码通常1和2混合编程。  django通过中间件部分隐藏了连接/事务管理的概念,写法上也比较简单,接近java常说的充血的domain model. 内容上也没有sqlalchemy 的sql expression层次。 易用性就体现出来了。  不过用过的orm中,能达到sqlalchemy这样高度的orm, 还没有在其他语言中看到。 ruby有sequal, java的jooq都有部分sqlalchemy思想的影子。

django ORM 怎样判断数据库中的表是否已经存在

Django makemigration 和 Django migrate 会保证 Django 管理的表一定是存在的。(不要忘记执行这两个 manage 命令就行了, 使用 python manage.py 可以看帮助)如果是外部表(managed=False),可以使用 数据库连接 构造查询表的 SQL 去测试。

django 如何直接用模型代码(ORM)来当场测试查看查询数据库的效果

在django项目中使用: python manage.py shellfrom django.db import connection#import 相关模型的class#执行query查询print connection.queries

如何在django系统外使用django的ORM 板甲

  在一个新的独立脚本里面使用django的orm系统。例如我曾在一个django项目里面,用tornado单独实现了其中的IM(即时通信)功能。如果直接import django的models的话,会出现以下错误  django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.  显然,这里的错误信息提示我们django的配置有问题,这意味着我们需要手动在新的脚本里面指定django的设置文件————也就是setting.py文件。做到这一步很简单,只需要在脚本的开头加上如下的代码:  import sys from django.core.wsgi import get_wsgi_application sys.path.extend() os.environ.setdefault(““DJANGO_SETTINGS_MODULE““,““Name_Of_Your_Django_Project.settings““) application = get_wsgi_application()  如此之后应该就一切工作正常了。  The English version can be found on my personal blog: How to use django models out of django project

为什么很多人都喜欢 Django 的 ORM 而不是 SQLAlchemy,是因为简单

  sqlalchemy使用上有两个层次,1是使用sql expression, 说白可以让你用python写sql, 2是它的orm, orm是使用session的,自行管理session生存期,自行在多个过程中传递session,自行管理事务。写法上是通常的transaction script(java常说的贫血的domain model)模式。实际编码通常1和2混合编程。  django通过中间件部分隐藏了连接/事务管理的概念,写法上也比较简单,接近java常说的充血的domain model. 内容上也没有sqlalchemy 的sql expression层次。 易用性就体现出来了。  不过用过的orm中,能达到sqlalchemy这样高度的orm, 还没有在其他语言中看到。 ruby有sequal, java的jooq都有部分sqlalchemy思想的影子。

如何在django系统外使用django的ORM

在django项目中使用: python manage.py shell from django.db import connection #import 相关模型的class #执行query查询 print connection.queries

为什么很多人都喜欢 Django 的 ORM 而不是 SQLAlchemy,是因为简单吗

我从2006年开始,翻译过SQLAlchemy、Django、SQLObject的文档。你自己去看看英文文档就知道了,SQLAlchemy那是给人看的么?一个ORM而已,搞了1000页的文档,而且字特别密集,废话一萝筐。我都怀疑写文档的人是不是在用英文的某种文言文在写,简单的话,却几乎各种同义生词,奇怪语法。英文文档里一个对立面可以参考Flask的文档,那叫一个简单易懂。2006-2007年,我依次完成了SQLObject和SQLAlchemy的文档后(部分翻译)。发现SQLObject在逐渐没落(现在很多人都没听说过了)。而SQLAlchemy又是如此奇葩的存在。就只好搞定了DBUtils,然后就不再用任何ORM了。以我的观点,ORM是在SQL之上的封装,而这种封装引入了太厚的封装,使得程序员对底层的控制力明显减弱,又加入了太多新的设计。所以我是不赞同使用ORM的,还是干干净净的SQL好用的多。