Django 是一款非常流行的 Python web 框架,它提供了一种高效、灵活、易于使用的方式来构建 Web 应用程序。Django 中自带的 ORM(Object-Relational Mapping)工具能够让程序员轻松地创建和管理数据库,而不需要手动写 SQL。在本文中,我们将深入探讨 Django 的数据库连接及操作,介绍如何使用 Django 的 ORM 创建、插入、更新和删除数据等操作。
在网站设计制作、网站制作过程中,需要针对客户的行业特点、产品特性、目标受众和市场情况进行定位分析,以确定网站的风格、色彩、版式、交互等方面的设计方向。成都创新互联还需要根据客户的需求进行功能模块的开发和设计,包括内容管理、前台展示、用户权限管理、数据统计和安全保护等功能。
一、Django 的数据库连接
Django 的 ORM 工具支持多种数据库,包括 PostgreSQL、MySQL、Oracle 和 SQLite 等。Django 的 ORM 工具提供了一个统一的接口,可以在不同的数据库系统之间切换,而且不需要修改任何代码。在配置 Django 框架使用的数据库之前,需要在项目的 settings.py 文件中设置 DATABASES 变量。例如:
“`
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘mydatabase’,
‘USER’: ‘mydatabaseuser’,
‘PASSWORD’: ‘mypassword’,
‘HOST’: ‘localhost’,
‘PORT’: ‘3306’,
}
}
“`
这里我们使用 MySQL 数据库作为例子,其中 ENGINE 变量指定了使用的数据库引擎。 在这个例子中,我们使用 mysql 数据库引擎连接名为 mydatabase 的数据库,连接用户名为 mydatabaseuser,密码为 mypassword,连接地址为 localhost,连接端口为 3306。需要根据实际情况进行修改。
二、Django 的数据库操作
2.1 创建数据库表
Django 的 ORM 工具可以根据 models.py 文件自动创建数据库表。在 models.py 文件中定义的类表现为数据库中的一个表,类中的每个属性对应着数据库表中的一列。Django 还提供了一些字段类型,如 BooleanField、CharField、DateField 等,这些字段可以指定表的列名、数据类型以及其他有用的参数。
例如,我们定义一个名为 Student 的模型类:
“`
from django.db import models
class Student(models.Model):
student_id = models.CharField(max_length=20, unique=True)
name = models.CharField(max_length=50)
age = models.IntegerField()
gender = models.CharField(max_length=10)
grade = models.CharField(max_length=10)
“`
这个模型类对应着一个名为 Student 的数据库表,表中有 student_id、name、age、gender、grade 这 5 个列,每个列的数据类型已在代码中定义。
要在数据库中创建这个表格,需要在控制台中输入以下命令:
“`
python manage.py makemigrations
python manage.py migrate
“`
其中 makemigrations 命令会根据 models.py 文件创建迁移文件,并存储在 migrations 文件夹中;migrate 命令会应用这些迁移文件。
2.2 插入数据
ORM 工具提供了一个 save() 方法,可以将新的数据对象保存到数据库中:
“`
student = Student(student_id=’20230001′, name=’Tom’, age=18, gender=’male’, grade=’2023′)
student.save()
“`
其中 student_id 是该条数据的主键,因此需要设置为唯一。
2.3 更新数据
ORM 工具还提供了一个 update() 方法,用于更新已有的数据:
“`
student = Student.objects.filter(name=’Tom’).first()
student.age = 20
student.save()
“`
这个例子中,我们先使用 filter() 方法获取 name 为 ‘Tom’ 的学生,然后将其 age 属性更新为 20,最后调用 save() 方法保存修改。
2.4 删除数据
ORM 工具提供了一个 delete() 方法,可以删除指定的数据对象:
“`
student = Student.objects.filter(name=’Tom’).first()
student.delete()
“`
这里我们删除了名字为 ‘Tom’ 的学生数据。
2.5 查询数据
ORM 工具提供了丰富的查询方法,如 filter()、exclude()、get()、all() 等等,可以根据不同的条件查询数据。例如:
“`
# 查询全部学生的数据
students = Student.objects.all()
# 查询性别为女性的学生
students = Student.objects.filter(gender=’female’)
# 查询年龄在 18 到 20 之间的学生
students = Student.objects.filter(age__range=(18, 20))
“`
这里使用 filter() 方法查询数据,其中 __range 表示取值范围。返回的结果是一个 QuerySet 对象,可以对其中的数据进行操作。
三、
Django 的 ORM 工具为我们带来了许多便利,可以使用 Python 代码管理和查询数据库,降低了开发复杂 Web 应用的难度。在实际开发中,我们可以从配置数据库连接开始,快速地使用 Django 的 ORM 工具进行数据库操作,提高开发效率。
相关问题拓展阅读:
django里1个model对应1个表 view里面可以用到任意的model啊
正经回答:先在数据库中建立好视图,然后django中建立对应的model。表所对应的类下面再建立一个Meta类,大致如下
class ViewModel(models.Model):
“””这个model类对应你凯庆所禅祥建立好的视图”””
贺孙搏 class Meta(object):
“””同理,该方法可用于使用mysql中任何已有的表,不仅是视图”””
db_table = ‘your_view’ #显式指定表名,也就是你建立的视图的名字
managed = false #默认是ture,设成false django将不会执行建表和删表操作
# 建立字段间的映射
# 需要注意的是,必须设一个字段为主键
# 不然django会自动创建一个id字段为主键,引发错误
百度知道越来越辣鸡了,全是答非所问的。
视图相当於虚拟的表凳毁樱,可以使用正常SQL语句进行增删查改的操作,返回一张表。其实说白了与枣丛表的功能基本一样。
触发器,是在执行增 删 改的时候触发的一些SQL操作。可以在增删改之後触发 SQl,也可以在增删改的时候替代SQL。有两种不同的触发模式而已。
一下是来自官方的标准解释:
什么是视图?
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。
SQL CREATE VIEW 语法
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。
Ø 什么是触发器
触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器余世和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2023中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。
DML触发器分为:
1、 after触发器(之后触发)
a、 insert触发器
b、 update触发器
c、 delete触发器
2、 instead of 触发器 (之前触发)
其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。
触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。
Model是django项目的基础, 如果一开始没有好好设计好, 那么在接下来的开发过程中就会遇到更多的问题. 然而, 大多数的开发人员都容易在缺少思考 的情况下随意的增加或修改model. 这样做的后果就是, 在接下来的开发过程中, 我们不得不做出更多努力…
在网上看到都是使用Django的models和makemigration,migrate命令来创建新表,并使用。可是我的数据已经存在了已经创建好,并且已经存储有数据了,不能再重新创建新表了。了解Django的表明和models名称的映射关系就可以让Django使用已经存在的表。
假如在Django存在models如下:
view plain copy
from django.db import models
# Create your models here.
class Sciencenews(models.Model):
id = models.CharField(max_length=36,primary_key=True)
first_module = models.CharField(max_length=30,default=”News”)
second_module = models.CharField(max_length=30,default=”Latest News”)
title = models.CharField(max_length=300)
author = models.CharField(max_length=60,null=True)
publish_date = models.CharField(max_length=35,null=True)
content = models.TextField(null=True)
crawl_date = models.CharField(max_length=35,null=True)
from_url = models.CharField(max_length=350,null=True)
执行数据迁移命令:
view plain copy
python manage.py makemigration
python manage.py migrate
会在数据库中生成名称为show_sciencenews的数据表。show为应用名称,此处我的应用名称为show。可以看到Django创建表的命名规则:应用名_模型名。
数据库设计是整个设计最基础的部分
1、django app的设计:根据系统的需求分析来设计django的app,django的开发是基于app来开发的,所以之一步就是设计app。
2、各app model 的设计:也就是设计对应的数据表
3、数据表的生成以及修改
使用在线教育系统作为实例:
userprofile的设计:在任何一个系统中,user表都是之一个被设计的,django会产生几个默认用户数据表
在设计我们自己的user表的时候,我们希望能生成自己的表又希望能够继承django的默认表,此时,我们可以继承AbstractUser(
from django.contrib.auth.models import AbstractUser
)
class UserProfile(AbstractUser):
pass
定义完UserProfile表之后,我们需要在setting.py文件中注册users app,INSTALLED_APPS =
‘users’,
>
并且定义一个方法AUTH_USER_MODEL = “users.UserProfile”,注意这里是使用users.UserProfile而不是users.model.UserProfile
(1)user model的设计:
我们在设计django app的时候,每个app中都有model,model文件中很有可能用到其他app文件当中的model,这就会很容易引入循环引用的问题,为了解决这个问题,很常用的一种方法就是使用分层model的方法,也就是上一层可以引用下一层
的model,如下:
注:PEP8的在引入的规范是之一个区域是导入Python自带的包,然后隔一行的第二个区域是第三方的包,如django,然后隔一行的第三个区域是我们自己定义的一些model
(2)course model 的编写:一个数据可能和另一个数据是一对多的关系,但是一张表存储不了这种关系,所以就需要把这两个数据分别存储在不同的数据表当中,这样就会引入外键的关系。
model的FileFIield,定义了这个字段就可以在后台系统中生成上传文件的按钮
(3)oganization model的编写:
(4)operation的model编写:
所有的APP编写完成之后,我们可以建立Python的apps包,把所有的app都放到这个apps中,把所有的APP放到apps之后,会发现各个app的model的引用可能会出现红线,说明我们找不到这些引用的包,所以需要我们在setting.py文件当中
把apps加入Python的搜索目录之下,
import syssys.path.insert(0, os.path.join(BASE_DIR, ‘apps’))
关于django 数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
分享标题:Django的数据库连接及操作(django数据库)
URL地址:http://www.shufengxianlan.com/qtweb/news21/253971.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联