Django----链接数据库,增删改查

创建一个项目
django-admin startproject mysite
查看项目是否创建成功(网站)
python manage,py runserver
创建一个app
python manage.py startapp polls
创建一个视图

在 `polls/views.py文件下输入代码

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello")

在polls文件下创建一个新的urls.py文件,在polls/urls.py文件里输入代码

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

mysite/polls.urls中插入一个include()

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]
检验是否正常工作
 python manage.py runserver

浏览器网址:后面加上polls

链接数据库(mysql)

配置default数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名',
        'USER': 'root',
        'PASSWORD': '数据库密码',
        'HOST': '127.0.0.1',
    }
}
创建模型(购物)
class Types(models.Model):
    id = models.AutoField(primary_key=True)
    firsts = models.CharField('一级类型',max_length=100)
    seconds = models.CharField('二级类型',max_length=100)
    def __str__(self):
        return str(self.id)
    class Meta:
        verbose_name='商品类型'
        verbose_name_plural = '商品类型'

class CommodityInfos(models.Model):
    id = models.AutoField(primary_key = True)
    name = models.CharField('商品名称',max_length=100)
    sezes = models.CharField('商品规格',max_length=100)
    types = models.CharField('商品类型',max_length=100)
    price = models.FloatField('商品价格')
    discount = models.FloatField('折后价格')
    stock = models.IntegerField('存货数量')
    sold = models.IntegerField('已售数量')
    likes = models.IntegerField('收藏数量')
    created = models.DateField('上架日期',auto_now_add=True)
    img = models.FileField('商品主图',upload_to=r'imgs')
    details = models.FileField('商品介绍',upload_to=r'details')

    def __str__(self):
        return str(self.id)

    class Meta:
        verbose_name ='商品信息'
        verbose_name_plural='商品信息'
激活模型

mysite/settings.pyINSTALLED_APPS 子项添加点式路径后,它看起来像这样:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',
]

现在Django会出现polls应用接着运行

python manage.py makemigrations polls
#运行结果
Migrations for 'polls':
  polls\migrations\0001_initial.py
    - Create model CommodityInfos
    - Create model Types

在数据库中创建表
python manage.py migrate
进入API

进入django的shell模式

python manage.py shell

引用类方法(类名)

 from polls.models import Types, CommodityInfos

查看所有命令

In [12]: Types.objects.all()
Out[12]: <QuerySet [<Types: 1>]>

添加操作

方法一:
t = Types()
t.firsts='女装'
t.seconds='男装'
t.save()

方法二:
#创建
In [20]: t=Types.objects.create(firsts='儿童用品',seconds='婴儿车')
#获取新增的数据id
In [21]: t.id

方法三
In [22]: t=Types(firsts='儿童用品',seconds='婴儿车')
In [23]: t.save()

#查询数据,没有就添加一条
In [25]: d = dict(firsts='儿童教育',seconds='通话书籍')
In [26]: t = Types.objects.get_or_create(**d)
In [27]: print(t)
(<Types: 4>, True)
说明新加了一条数据
再次运行出现
(<Types: 4>, False)
说明改数据已经存在了

#如果数据存在就修改,如果数据不存在就添加,注意如果有多条数据符合条件将报错
 d=dict(firsts='儿童教育',seconds='通话书籍')
In [6]: t = Types.objects.update_or_create(**d,defaults={'firsts':'儿童教育'})
批量添加操作
In [7]: d1 = Types(firsts = '儿童教育',seconds = '童话书籍')
In [8]: d2 = Types(firsts = '儿童影视',seconds = '童话动画')
In [9]: obj_list = [d1,d2]
In [10]: t = Types.objects.bulk_create(obj_list)
#注意d1  d2的写法,是传参数的类
数据更新操作
#方法一
In [11]: t = Types.objects.get(id=1)
In [12]: t.firsts = '儿童用品'
In [13]: t.save

#方法二
t = Types.objects.filter(id=1).update(seconds='天天')
#也可以写成
 d = dict(seconds='男装')
 t = Types.objects.filter(id=1).update(**d)
#如果不加入filter作为限制项,则修改针对所有数据

#如果将某数据在原基础上加10这里则需要  F
In [25]: from django.db.models import F
In [26]: from django.db.models import *
In [27]: t = Types.objects.filter(id=1)
In [28]: t.update(id=F('id')+10)
这里是让ID为1的数据的id10
删除数据
删除全部数据
 Types.objects.all().delete()

#删除一条数据
Types.objects.get(id=2).delete()

#删除多条数据
Types.objects.filter(firsts='儿童用品').delete()

如果删除的数据有其它表关联,则根据建表时外键字段的on_delete的不同有不同的

比如**on_delete = models.CASCADE**则删除了一条信息,与之关联的信息会被直接删除
PROTECT模式 删除有关联的数据直接提示数据删除失败
SET_NULL模式 将关联被删除数据的数据外键设为null,建表时必须允许外键为null才可以否则爆炸
SET_DEFAULT模式 将被删除的外键字段改为设置好的默认值
SET模式 将关联数据被删除的数据的外键关联到其他的数据
DO_NOTHING模式 不做任何处理,删除结果由数据库的删除看模式决定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值