Django的数据库连接及操作 (django 数据库)

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里面怎么实现数据库视图啊 就是虚拟表

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表的数据是更新前的或是删除的数据。

django使用已有的数据库表怎么建立model

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创建表的命名规则:应用名_模型名。

关于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 数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Django的数据库连接及操作 (django 数据库)