django两种处理model数据的方式

本文介绍了Django中处理model数据的两种方式,包括基于已创建Model的RawQuerySet使用方法及其限制,以及如何通过直接操作数据库连接执行自定义SQL。示例代码展示了如何进行查询和获取数据。
摘要由CSDN通过智能技术生成

django提供了很方便的数据库操作层,但是有时候你发现它还是不够用。这时候你想直接使用sql操作数据库,django让你很方便使用它,并且提供了2中方式:

a. 基于已创建的model

https://docs.djangoproject.com/en/dev/topics/db/sql/#performing-raw-queries

下面是示例代码:

Blog.objects.raw(“select * from blog_blog”)
<RawQuerySet: ‘select * from blog_blog’>

blog = Blog.objects.raw(“select * from blog_blog”)
bg = Blog.objects.raw(“select * from blog_blog”)
bg.count()
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘RawQuerySet’ object has no attribute ‘count’

len(bg)
Traceback (most recent call last):
File “”, line 1, in
TypeError: object of type ‘RawQuerySet’ has no len()

len(list(bg))
9

b. 基于数据库的连接 – 这种方式已经完全脱离了django的model

https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly

下面是示例代码:

from django.db import connection, transaction
cs = connection.cursor()
bg1 = cs.execute(“select * from blog_blog”)
type(bg1)
<type ‘long’>

print bg1
9

row = cs.fetchone()
print row
(1L, u’common’, u’my first blog’, u’Jhon’, u’yeah, as you can see from title, this is my first blog. Just for practic’, datetime.date(2012, 4, 20), datetime.date(2012, 4, 20))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django ModelDjango Web 开发框架的核心组成部分之一,它用于数据建模,即定义和管理网站的数据结构。简而言之,Model 对象是基于你所处理的特定领域(Domain)来设计的,用来描述数据库中某类数据的特性和结构。 在 Django 中,通过 Model 可以将现实世界的事物映射到数据库中对应的表格上,同时提供了一套 API 来进行数据的增删改查(CRUD),使得开发者能够高效地操作数据库,而无需关心底层的 SQL 查询细节。 下面是一些关于 Django Model 的关键特性: ### 1. 定义模型 在 Django 中,每个模型都是一个 Python 类,这个类继承自 `django.db.models.Model` 类。你可以在这个类中定义各种属性来代表数据库中的列,例如 CharField、IntegerField、DateTimeField 等。这些字段属性决定了数据库中对应列的类型、长度以及其他特殊属性如是否允许为空、是否唯一等。 ### 2. 实现关系 Django Model 提供了多种关系类型,比如一对一(OneToOne)、一对多(ManyToOne/MultipleObjectsThrough)和多对多(ManyToMany)等,来构建复杂的数据库结构。这种关系可以在模型之间进行定义,使得数据之间的联系更为清晰直观。 ### 3. 自动生成数据库迁移 当修改模型(添加新字段、删除旧字段、改变字段类型等)时,Django 会自动生成相应的数据库迁移脚本,这些脚本可以用来创建新的表结构或者调整现有的表结构,保证数据库的完整性和一致性。 ### 4. 数据操作 API 除了定义模型之外,Django 还提供了一系列 API 来执行常见的数据库操作,包括查询、过滤、排序、分页、创建、读取、更新、删除等。这些操作可以通过模型对象来执行,使得数据处理变得非常简单且高效。 ### 5. ORM 和 SQL 性能优化 Django 使用了一种称为 Object-Relational Mapping (ORM) 的机制来处理数据库操作,这使得开发者不需要直接编写 SQL 查询就可以完成大部分数据操作。尽管如此,Django 也支持手动编写 SQL 查询,对于性能敏感的部分,可以直接使用原生的 SQL 调优技术。 ### 示例:基本的模型定义 假设我们要创建一个博客系统,其中需要有文章和作者两个实体。我们可以这样定义模型: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() author = models.ForeignKey(Author, on_delete=models.CASCADE) ``` 在这段代码中,我们定义了两个模型:`Author` 表示作者,包含姓名;`Article` 表示文章,包含了标题、内容以及外键关联到作者,表示每篇文章都隶属于某个作者。 通过这样的模型定义,我们不仅定义了数据库的结构,还提供了一整套用于管理和操作这些数据的工具集。这对于快速构建数据驱动的 Web 应用程序至关重要。 --- 相关问题 --- 1. Django Model 中有哪些基本的字段类型及其用途是什么? 2. Django Model 如何实现数据间的一对一、一对多及多对多的关系? 3. 当修改 Django Model 结构时,是如何保证数据库的迁移和兼容性的?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值