Django概述(第三章)模型

一.定义与使用模型
Django概述(第三章)模型_第1张图片
这是大概的步骤:
1.一般是和mysql数据库连接,所以需要注意:
在项目中的settings.py文件中配置参数如下:
连接数据库

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME':"test",
        'HOST':"127.0.0.1",
        'POST':"3306",
        'USER':"root",
        'PASSWORD':"123456",
    }
}

2.在子应用中的models.py文件中模型类中创建。

from django.db import models

# Create your models here.
#一个class类对应一张表
class Classes(models.Model):
    #字段来描述列
    ClassesName=models.CharField(max_length=30) #varchar(30)

class Students(models.Model):
    StuName=models.CharField(max_length=20)
    StuAge=models.IntegerField(null=True) #默认null是False 表示不能为空
    StuSex=models.BooleanField()  #d布尔字段,表示0或1
    #外键列
    myclass=models.ForeignKey(Classes,on_delete=models.CASCADE)

3.有数据库的在子应用中的models.py文件中模型类中创建(依据数据库来创建)

from django.db import models

# Create your models here.
#一个class类对应一张表
class Users(models.Model):
    class Meta:    #描述元数据的内部类
        db_table="users"    #描述数据库中的表名
    #字段来描述列
    id=models.AutoField(primary_key=True,db_column="id")
    username=models.CharField(max_length=30)
    email=models.CharField(max_length=50,null=True)
    password=models.CharField(max_length=30, null=True)
    def __str__(self):    #魔法函数,用于打印对象时,显示对象中的某个信息
        return self.email

class Articles(models.Model):
    class Meta:
        db_table="articles"
    id=models.AutoField(primary_key=True,db_column="id")
    title=models.CharField(max_length=50,null=True) #默认null是False 表示不能为空
    content=models.TextField()
    create_date=models.DateTimeField(null=True,auto_now_add=True)
    user_id=models.ForeignKey(Users,on_delete=models.CASCADE,db_column="user_id")
    def __str__(self):
        return self.title

注意此时会报错!错误信息为有一个err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

所以需要装mysqlclient 模块!
pip install mysqlclient
必须进入到项目地下
cd 项目名
执行下面命令:
pip install mysqlclient
注意:如果有数据不再执行以下命令!
生成迁移文件
python manage.py makemigrations
执行迁移文件
python manage.py migrate

数据的增删查改

添加数据
Django概述(第三章)模型_第2张图片

python manage.py shell
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from hello.models import *
>>> c=Classes()
>>> c.ClassesName="大数据2001"
>>> c.save()    *添加*
>>> c1=Classes(ClassesName="大数据2010")
>>> c1.save()
>>>s1=Students(StuName='jack',StuAge=25,StuSex=False,myclass=c1)
>>> s1.save()
>>>c1.ClassesName='大数据0001'
>>>c1.save()    *修改*

查询
Django概述(第三章)模型_第3张图片代码如下:

>>> s1.StuSex=True
>>> s1.myclass=Classes.objects.get(id=1)
>>> s1.save()
>>> stu=Students.objects.all()
>>> stu
<QuerySet [<Students: Students object (1)>]>
>>> stu[0]
<Students: Students object (1)>
>>> stu[0].myclass.ClassesName
'大数据2013'
>>> c1.students_set.all()
<QuerySet []>

查询
查询id大于20的笔记

>>> Articles.objects.filter(id__gt=20)
[, , .txt>, -笔记.txt>, .txt>]>

查询id是1,10,20的笔记

>>> Articles.objects.filter(id__in=[1,10,20,])
[, , ]>

查询日期在2021-04-07到2021-04-12的笔记

>>> Articles.objects.filter(create_date__range=['2021-04-07','2021-04-12'])
[, , , (
增读改删)操作>]>

查询以java开头的笔记

>>> Articles.objects.filter(title__startswith='java')
[.txt>, , , , , , , ]>

查询以语法结尾的笔记

>>> Articles.objects.filter(title__endswith='语法')
[]>

查询2022年的笔记

>>> Articles.objects.filter(create_date__startswith='2022')
[]>

note=Articles.objects.get(id=1)
note.user_id.username
u=Users.objects.get(id=1)
u.articles_set.all()

查询作者是admin的所有笔记

>>> u=Users.objects.get(username='admin')
>>> u
.com>
>>> u.articles_set.all()
[, ]>

查询不是’人间四月天‘的其他笔记\

>>> Articles.objects.exclude(title='人间四月天')
[, , , ,
(增读改删)操作>, , .txt>, , , <
Articles: java-类的定义>, , , , , , , .txt>, -笔记.txt>, .txt>]
>

Q对象

查看以java开头并且以定义结尾的笔记

>>> Articles.objects.filter(Q(title__startswith='java')&Q(title__endswith='定义'))
[]>

查看包含java或包含python的笔记

>>> Articles.objects.filter(Q(title__contains='java')|Q(title__contains='python'))
[.txt>, , , , , , , , ]>

执行原生的SQL语句
1.raw()方法

>>> a=Articles.objects.raw("select id,title from articles where title like %s",["%"+"java"+"%"])
>>> a
select id,title from articles where title like %java%>
>>> a[0]
.txt>

2.利用游标对象执行SQL语句

>>> from django.db import connection
>>> c=connection.cursor()
>>> c.execute("select * from articles limit 0,5")
5
>>> c.fetchall()

笔记

你可能感兴趣的:(项目,笔记,python,django)