Django中数据库及后台管理

数据库操作

配置

  1. 安装驱动程序------pip install pymysql

  2. 在同名子目录的__init__.py文件中添加下列语句

    from pymysql import install_as_MySQLdb
    
    install_as_MySQLdb()
    

    其作用是让Django的ORM能以mysqldb的方式调用PyMySQL

  3. 修改配置文件

    DATABASES = {
         
        'default': {
         
            'ENGINE': 'django.db.backends.mysql',
            'HOST': 'localhost',  # 数据库主机
            'PORT': 3306,  # 数据库端口
            'USER': 'root',  # 数据库用户名
            'PASSWORD': '******',  # 数据库用户密码
            'NAME': 'two_demo'  # 数据库名字
        }
    }
    
  4. 在mysql中创建同名数据库

    create database two_demo default charset=utf8;
    

模型定义

  • 数据库表名-------默认为**子应用名称小写_模型类名小写**;可以通过db_table来自主指明数据库名称

  • 主键: django会为表创建自动增长的主键列,每个模型只能有一个主键列,若自主设置主键,则不会再创建自动增长的主键列,默认主键的属性为id,可以使用pk来替代

  • 字段属性

    类型 说明
    AutoField 自动增长的IntegerField,通常不用指定,会自动创建自增长的属性
    BooleanField 布尔类型,True和False
    NullBooleanField 支持Null、True、False三种数据类型
    CharField 字符串,参数max_length表示最大字符个数
    TextField 大文本字段,一般超过4000个字符时使用
    IntegerField 整数
    DecimalField 十进制浮点数,参数max_digits表示总位数,参数decimal_places表示小数位,通常用于存储金额
    FloatField 浮点数
    DateField 日期,有两个参数auto_now_add和auto_now_add;其中auto_now_add默认值为false,设为true时,能在保存该字段时,将其值设置为当前时间,并且每次改动,都会自动更新;而auto_now_add默认值也为false,设置为true时,会在model对第一次被创建时,将其字段的值设为创建时间,以后修改对象时,字段的值不会再更新.注意两个不能组合使用,会相互排斥
    TimeField 时间,参数同DateField
    DateTimeField 日期时间,参数同DateField
    FileField 上传文件字段
    ImageField 继承于FileField,对上传的内容进行校验,确保是有效的图片
  • 外键

    设置外键时,需要通过**on_delete**选项指明主表删除数据是,对于外键引用表数据如何处理,有以下可选常量:

    • CASCADE--------级联,删除主表数据时联通一起删除从表中的数据
    • PROTECT----------保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
    • SET_NULL-------设置为NULL,仅在该字段null=True允许为null是可用
    • SET_DEFAULT------设置为默认值,仅在该字段设置了默认值时可用
    • SET()--------设置为特定值或者调用特定方法

迁移

  • 生成迁移文件

    python manage.py makemigrations
    
  • 同步到数据库中

    python manage.py migrate
    

数据库----增加

  • save()

    def create_book(request):
        # 第一种创建方式
        book = BookInfo()
        book.bname = "西游记"
        book.bdate = "1980-01-01"
        book.bcomment = 500
        book.breaded = 10000
        book.save()
    
  • create()

    BookInfo.objects.create(
            bname="东游记",
            bdate="1980-05-03",
            bcomment=500,
            breaded=5000
        )
    

数据库----删除

  • 模型类对象.delete()

    def delete_hero(request):
        # 第一种删除方式
        # hero = HeroInfo.objects.filter(hname="孙悟空").first()
        # hero.delete()
    
    
  • 模型类.objects.filter().delete()

    # 第二种
        HeroInfo.objects.filter(hname="袁紫衣").delete()
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值