Django框架(Models)

本文介绍了Django框架中的ORM操作,包括如何配置数据库、使用save()方法和update()方法进行数据更新,强调了update()在多条记录更新上的效率。还提及了F查询和Q查询在复杂查询中的应用,以及对直接使用SQL的看法。
摘要由CSDN通过智能技术生成

首先要先把settings文件里面的数据库配置写好

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'ceshishi',    #你的数据库名称

        'USER': 'root',   #你的数据库用户名

        'PASSWORD': '234324242423424', #你的数据库密码

        'HOST': '106.39.23.14', #你的数据库主机,留空默认为localhost

        'PORT': '33906', #你的数据库端口

    }

}

当然你也可以用默认的SQLite,那就不用配置这个了

NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建

USER和PASSWORD分别是数据库的用户名和密码。

设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。

然后,启动项目,会报错:no module named MySQLdb

这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL

所以,我们只需要找到项目名文件下的__init__,在里面写入:

import pymysql
pymysql.install_as_MySQLdb()

问题解决!

ORM(对象关系映射)

from django.db import models

# Create your models here.

# class Book(models.Model):
#     name = models.CharField(max_length=20)#告诉数据库存一个字符串类型,长度是20,所有的字符串类型都是CharField
#     price = models.IntegerField()#存一个数字格式
#     pub_data = models.DateField()#存一个日期格式
#     publish = models.ForeignKey("Publish")#建立外键关联Publish表,Django会自动在字段名字后面加上_id
#     authors = models.ManyToManyField("Author")
#
#
#     def __str__(self):
#         return self.name
# #这个表建立之后,在终端执行python manage.py makemigrations 就会在migrations文件夹中建立一张表这个表就是Book  但是还不能用,因为
# # 数据库还没有生成内容   还需要执行这个命令python manage.py migrate这样数据库就有内容了
# #右侧边栏database---“+”---dataSource---Sqllite 进去之后点击Sqllite,中间有个down下载点击下载完成之后,点击OK,
# # 回到页面把db.sqllite拖到右侧边栏中,db这个里面的文件就是我们建立的所有的表了,可以在数据库里面直接添加数据了
# # 点击菜单栏中的+去添加数据,不用提交,这个是系统会自动帮你提交
#当然mysql也是这样


rom django.db import models

# Create your models here.


class Book(models.Model):
    name=models.CharField(max_length=20)
    price=models.IntegerField()
    pub_date=models.DateField()
    publish=models.ForeignKey("Publish")#建立外键关联Publish表,Django会自动给后面加上一个_id
    # authors=models.ManyToManyField("Author")#建立多对多表关系时间用的,也可以不用这个,自己建立关联表,用这个建立的话
    #系统会自动帮你生成一个关联表

    def __str__(self):
        return self.name

class Publish(models.Model):

    name=models.CharField(max_length=32)
    city=models.CharField(max_length=32)

    def __str__(self):
        return self.name


class Book_Author(models.Model):
    book=models.ForeignKey("Book")
    author=models.ForeignKey("Author")


class Author(models.Model):

    name=models.CharField(max_length=32)
    age=models.IntegerField(default=20)

    def __str__(self):
        return self.name
下面这个记录的是views里面的代码,主要是一些 增删改查的用法
def indexx(request):
    return render(request,'indexx.html')


def addbook(request):
    # Book.objects.create(name='linux',price=33,pub_data="2016-12-12")#增加表数据
    # Book.objects.create(**dict)#这个是通过objects.create的方法去Book表里添加数据的
    #
    # b = Book(name = 'python', price = 99 ,pub_data = '2019-12-12')#这个是通过函数属性增加数据
    # b.save()
    '''
    publish_obj = Publish.objects.filter(name='南方出版社')[0]
    Book.objects.create(name='语文',price=106,pub_date="2018-01-11",publish=publish_obj)
    #通过关联的主表插入外键
    book_obj = Book.objects.get(name='python')
    print(book_obj,type(book_obj))#python   <class 'blog.models.Book'> 定位到BOOK表

    print(book_obj.name) #python

    print(book_obj.pub_date) #2021-01-05

    #一对多:book_obj.publish--------一定是一个对象
    print(book_obj.publish.name)  #大学出版社
    print(book_obj.publish.city)  #莲花
    print(type(book_obj.publish))
    #<class 'blog.models.Publish'>  book_obj.publish这一步其实就是找到models下的Publish类也即是说可以直接定位到publish这张表

    #查询南方出版社出过的所有书籍名字和价格
    '''
    '''
    #方式一
    # b = Publish.objects.filter(name='南方出版社')[0]
    # ret = Book.objects.filter(publish_id=b).values('name','price')
    # print(ret)
    # #方式二
    # b = Publish.objects.filter(name='南方出版社')[0]
    # print(b.book_set.all().values('name','price'),type(b.book_set.all()))#type是class 'django.db.models.query.QuerySet'
   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhaoXuWen23

你的鼓励是我的动力,持续更新中

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值