Django概述(第三章)模型

一.定义与使用模型
在这里插入图片描述
这是大概的步骤:
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

数据的增删查改

添加数据
在这里插入图片描述

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()    *修改*

查询
在这里插入图片描述代码如下:

>>> 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)
<QuerySet [<Articles: python学习笔记>, <Articles: 更改镜像源命令>, <Articles: hadoop 配置文件代码.txt>, <Articles: hdfs分布式文件系统-笔记.txt>, <A
rticles: T15.txt>]>

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

>>> Articles.objects.filter(id__in=[1,10,20,])
<QuerySet [<Articles: 人间四月天>, <Articles: 查询作业>, <Articles: java-自动导入机制>]>

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

>>> Articles.objects.filter(create_date__range=['2021-04-07','2021-04-12'])
<QuerySet [<Articles: flask-sqlalchemy查询的语法>, <Articles: shopping数据库goods表的数据>, <Articles: sql语句的几种类型>, <Articles: 数据库的CRUD(
增读改删)操作>]>

查询以java开头的笔记

>>> Articles.objects.filter(title__startswith='java')
<QuerySet [<Articles: java解决文字乱码.txt>, <Articles: java-面向对象>, <Articles: java-集合>, <Articles: java-类的定义>, <Articles: java-方法的签
名>, <Articles: java-断点调试>, <Articles: java-常见异常>, <Articles: java-自动导入机制>]>

查询以语法结尾的笔记

>>> Articles.objects.filter(title__endswith='语法')
<QuerySet [<Articles: flask-sqlalchemy查询的语法>]>

查询2022年的笔记

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

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
<Users: abc@qq.com>
>>> u.articles_set.all()
<QuerySet [<Articles: 人间四月天>, <Articles: 查询作业>]>

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

>>> Articles.objects.exclude(title='人间四月天')
<QuerySet [<Articles: 人间三月天>, <Articles: flask-sqlalchemy查询的语法>, <Articles: shopping数据库goods表的数据>, <Articles: sql语句的几种类型>,
<Articles: 数据库的CRUD(增读改删)操作>, <Articles: 查询作业>, <Articles: java解决文字乱码.txt>, <Articles: java-面向对象>, <Articles: java-集合>, <
Articles: java-类的定义>, <Articles: java-方法的签名>, <Articles: java-断点调试>, <Articles: java-常见异常>, <Articles: java-自动导入机制>, <Articl
es: python学习笔记>, <Articles: 更改镜像源命令>, <Articles: hadoop 配置文件代码.txt>, <Articles: hdfs分布式文件系统-笔记.txt>, <Articles: T15.txt>]
>

Q对象

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

>>> Articles.objects.filter(Q(title__startswith='java')&Q(title__endswith='定义'))
<QuerySet [<Articles: java-类的定义>]>

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

>>> Articles.objects.filter(Q(title__contains='java')|Q(title__contains='python'))
<QuerySet [<Articles: java解决文字乱码.txt>, <Articles: java-面向对象>, <Articles: java-集合>, <Articles: java-类的定义>, <Articles: java-方法的签
名>, <Articles: java-断点调试>, <Articles: java-常见异常>, <Articles: java-自动导入机制>, <Articles: python学习笔记>]>

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

>>> a=Articles.objects.raw("select id,title from articles where title like %s",["%"+"java"+"%"])
>>> a
<RawQuerySet: select id,title from articles where title like %java%>
>>> a[0]
<Articles: java解决文字乱码.txt>

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

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

笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值