精华内容
下载资源
问答
  • Django数据迁移 创建表结构:python manage.py migrate Django模型变更:python manage.py makemigrations Student ...Django框架的增删改查: #增 def wav_save(batch, phone): wav = audio(batch =bat...

    Django数据迁移
    创建表结构:python manage.py migrate
    Django模型变更:python manage.py makemigrations Student
    创建表结构:python manage.py migrate Student

    Django框架的增删改查:
    #增
    def wav_save(batch, phone):
    wav = audio(batch =batch,phone=phone)
    wav.save()

    #删
    def wav_delete(batch):
    wav = audio.objects.get(batch=batch)
    wav.delete()

    #改
    def status_update(batch,status):
    audio.objects.filter(batch=batch).update(status=status)

    #查
    def wav_select(taskId):
    print(‘根据taskId查询timestamp, sign, batch’)
    audio_path_list = models.audio.objects.all().filter(task_id=taskId)
    for i in range(len(audio_path_list)):
    dict = {}
    # 获取数据库数据
    batch= audio_path_list[i].batch
    timestamp= audio_path_list[i].timestamp
    sign= audio_path_list[i].sign
    # 封装成字典
    dict[“batch”] = batch
    dict[“timestamp”] = timestamp
    dict[“sign”] = sign
    print(dict)

    展开全文
  • Django是Python中一个非常牛逼web框架,他帮我们做了很多事,里边也提前封装了很多牛逼功能,用起来简直不要太爽,在写网站过程中,增删改查这几个基本功能我们是经常会用到,Django把这系列复杂逻辑性东西...

    在这里插入图片描述
    Django是Python中一个非常牛逼的web框架,他帮我们做了很多事,里边也提前封装了很多牛逼的功能,用起来简直不要太爽,在写网站的过程中,增删改查这几个基本的功能我们是经常会用到,Django把这系列复杂的逻辑性东西都封装成了方法,供我们直接使用,在使用过程中的体会是简单到令人发指,一个简单的例子给大家演示一下。
    在这里插入图片描述
    首先创建一个有多对一关系关联模型
    我们假设有一个主题,主题下边会有很多内容,然后我们将主题和内容用多对一的ForeignKey字段关联起来,如下:
    #models.py
    from django.db import models
    from django.shortcuts import reverseclass Topic(models.Model):
    text = models.CharField(‘主题’, max_length=100)
    date_added = models.DateTimeField(‘添加时间’, auto_now_add=True) class Meta:
    ordering = [’-date_added’]
    verbose_name_plural = “主题” def str(self):
    return self.text
    class Entry(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE, verbose_name=“主题”)
    text = models.TextField(‘具体笔记’)
    date_added = models.DateTimeField(‘添加时间’, auto_now_add=True) class Meta:
    ordering = [’-date_added’]
    verbose_name_plural = “具体知识” def str(self):
    return self.text[:50] + “…”
    在视图views.py中我们使用了Django给我们提供的通用显示视图ListView(通用列表视图),DetailView(通用详情视图)来进行数据查询处理。
    views.py
    from django.views.generic import ListView, DetailView # 通用显示视图
    from django.views.generic.edit import CreateView, DeleteView, UpdateView # 通用编辑视图
    from . import models as md
    from django.urls import reverse_lazy # 增删改成功后要跳转的链接方法引入# 通用显示视图查询列表 ListView
    class TopicsList(ListView):
    model = md.Topic # 属于哪个模型
    # 指定显示的静态模板
    template_name = ‘mysite/topics.html’
    # 自定义上下文变量,我们最好自己设置,覆盖掉默认的上下文变量
    context_object_name = ‘topics’
    #通用显示视图查询列表的详情页面 DetailViewclassTopicDetail(DetailView):
    model = md.Topic
    template_name = ‘mysite/topic.html’

    接上文,在增删改查的过程中,我们使用了Django给我们提供的通用编辑视图来处理表单数据,CreateView(添加),UpdateView(更新),DeleteView(修改),如下:
    #views.py
    class TopicUpdate(UpdateView):
    # 与通用显示视图一致,定义属于哪个模型
    model = md.Topic
    # 覆盖掉默认的视图模板,使用我们自定义的
    template_name = ‘mysite/edit_topic.html’
    # 允许编辑的字段
    fields = [‘text’]
    # 修改成功后跳转的链接地址
    success_url = reverse_lazy(‘mysite:topics’)
    class TopicDelete(DeleteView):
    model = md.Topic
    template_name = ‘mysite/del_topic.html’
    success_url = reverse_lazy(‘mysite:topics’)
    class EntryCreate(CreateView):
    model = md.Entry
    template_name = ‘mysite/new_entry.html’
    fields = [‘topic’, ‘text’]
    success_url = reverse_lazy(‘mysite:topics’)
    接着在我们urls中定义链接,注意这里的urls.py文件位于我们的应用中,并不是在项目中的urls.py里,我们在项目中利用了include进行了url地址的分发,这样做的好处,请自行了解官方文档。
    #urls.py
    from django.urls import path
    from . import views
    from .views import TopicCreate, TopicUpdate, TopicDelete, EntryCreateapp_name = ‘mysite’
    urlpatterns = [
    path(‘topics/’, views.TopicsList.as_view(), name=‘topics’),
    path(‘topics/int:pk/’, views.TopicDetail.as_view(), name=‘topic’),
    path(‘topic/add/’, TopicCreate.as_view(), name=‘topic-add’),
    path(‘topic/int:pk/’, TopicUpdate.as_view(), name=‘topic-update’),
    path(‘topic/int:pk/delete/’, TopicDelete.as_view(), name=‘topic-delete’), path(‘entry/add/’, EntryCreate.as_view(), name=‘entry-add’),
    ]
    最后来看看我们的在静态模板文件中如何调用。

    添加主题
    {% if topics %}
    {% for topic in topics %}

  • {{ topic.text }}

  • 修改
    删除
    {% endfor %}
    {% else %}

    还没有任何主题


    {% endif %}
    添加内容

    {{ topic }}

    {% for entry in topic.entry_set.all %}
        {{ entry.text }}
       <p>日期:{{ entry.date_added }}</p>
    {% endfor %}
    

    其他几个静态模板调用方法几乎一样,只需要更换action的提交地址即可,留给大家的作业了。
    #new_topic.html
    文章来自:https://www.itjmd.com/news/show-5327.html

    展开全文
  • 一、使用Admin实现增删改查 1、选择适合环境,创建一个Django项目 2、创建一个应用,并注册 创建:python manage.py startapp demo 注册:在settings.py中 INSTALLED_APPS 里添加demo.apps.DemoConfig 3、...

    一、使用Admin实现增删改查

    1、选择适合的环境,创建一个Django项目

    2、创建一个应用,并注册

    • 创建:python manage.py startapp demo
    • 注册:在settings.py中的 INSTALLED_APPS 里添加demo.apps.DemoConfig
      在这里插入图片描述
      在这里插入图片描述

    3、创建数据库并注册

    create database laundry charset=utr8;

    在这里插入图片描述

    4、在__init__.py 文件中安装MySQLdb

    在这里插入图片描述

    5、创建模型类,并迁移数据库

    python manage.py makemigrations
    python manage.py migrate

    在这里插入图片描述

    6、连接数据库,添加数据

    在这里插入图片描述

    点击Database下的+号,选择Data Source ,这里以MySQL为例,选择MySQL,出现上图界面,输入数据库的名称、用户、密码,点击Test Connection,原先没有下载的需要下载,连接成功后,出现Successful,打开表tb_laundry进行添加数据。

    7、创建超级用户

    python manage.py createsuperuser
    输入用户名,密码,邮箱

    在这里插入图片描述

    8、登录Admin

    在这里插入图片描述

    9、改Admin文件

    在这里插入图片描述

    10、修改模型类,设置语言

    decimal_place:小数点的位数
    max_digits:总位数,包含小数位数
    在这里插入图片描述
    在这里插入图片描述

    11、功能简单实现

    在这里插入图片描述

    展开全文
  • 创建项目 django-admin startproject django_model ... python manage.py startapp model 配置应用 model, 编辑 django_model/settings.py 文件: INSTALLED_APPS = [ 'django.contrib.admin', 'django...

    创建项目

    django-admin startproject django_model

    创建应用

    python manage.py startapp model

    • 配置应用 model, 编辑 django_model/settings.py 文件:
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'model',
    ]
    • 配置Mysql数据库:编辑 django_model/settings.py 文件, 内容如下:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # mysql数据库引擎
            'NAME': 'my_model',  # 数据库名字
            'USER': 'root',  # 用户名
            'PASSWORD': 'fe_cow',  # 密码
            'HOST': 'localhost',  # 主机
            'PORT': '3306'  # 端口
        }
    }
    • 创建应用所需数据库表, 首先我们创建数据库:

      create dababase my_model charset = utf8;

    • 注意: 使用PyMysql数据库驱动,需要在 djangomodel/_init__.py 中增加如下代码:(python2不需要配置这项)

      import pymysql
      pymysql.install_as_MySQLdb()

    定义模型

    • 定义模型其实就是定义一个python类;一个模型类代表数据库中一张表,一个模型类的实例代表这个数据库表中的一条特定的记录
    from django.db import models
    
    class Publisher(models.Model):
        """出版社"""
        name = models.CharField(max_length=30)
        address = models.CharField(max_length=50)
        city = models.CharField(max_length=60)
        country = models.CharField(max_length=50)
    
        def __unicode__(self):
            return self.name
    
    
    class Author(models.Model):
        """作家"""
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=40)
        email = models.EmailField()
    
        def __unicode__(self):
            return u'%s %s' % (self.first_name, self.last_name)
    
    
    class Book(models.Model):
        """书"""
        title = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author) # 书和作者是多对多的关系
        publisher = models.ForeignKey(Publisher) # 书和出版者是多对一的关系
        publication_date = models.DateField()
    
        def __unicode__(self):
            return self.title
    
    • 定义完模型后,要执行数据库迁移操作:

      先执行python manage.py makemigrations 在执行:python manage.py migrate

    • 一张表中定义了多对多的关系,ORM会自动创建实现多对多关系的第三张表。

    数据库的操作

    • 通过python shell 来演示数据库的操作。在终端切换到项目根目录下,输入命令python manage.py shell 进入shell操作环境。

    增删改查

    1 创建记录

    方法一:实例化(调用save()方法之前,Django不会访问数据库;save()方法没有返回值)

    >>> from apps.models import Author
    >>> author = Author(last_name='fe_cow')
    >>> author.save()
    >>> print author
     fe_cow

    方法二:create() (只用一条语句创建并保存一个对象,使用create()方法。)

    >>> Author.objects.create(first_name='fe',last_name='cow', email='280773872@qq.com')

    方法三:get_or_create(), 这种方法可以防止重复(速度稍慢,因为会先查数据库), 它返回一个元组。创建成功返回True,失败的话False,不执行创建。

    >>> author = Author.objects.get_or_create(last_name='fe_cow')
    >>> print author
    (<Author:  fe_cow>, False)  # False:说明已经重复 创建失败
    >>> author = Author.objects.get_or_create(last_name='cu_cow')
    >>> print author
    (<Author:  cu_cow>, True)  # True: 创建成功
    2 查询记录

    方法一:查询所有对象 (all()方法返回包含数据库中所有对象的一个查询集。)

    >>> author = Author.objects.all()
    >>> print author
    <QuerySet [<Author:  fecow>, <Author:  fe_cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author:  cu_cow>]>

    方法二:过滤查询 (filter()返回一个新的查询集,它包含满足查询参数的对象。)

    >>> author = Author.objects.filter(last_name='cu_cow')
    >>> print author
    <QuerySet [<Author:  cu_cow>]>

    方法三:指定查询 (get查询只能返回一个对象,多了少了都会引发DoesNotExist 异常)

    >>> author = Author.objects.get(id=1)
    >>> print author
     fecow

    方法四:双下划线查询____contains:包含;__icontains不区分大小写;__regex:正则查询;__lt:小于xxx;__lte:小于等于xxx;__gt:大于xxx;__gte:大于等于xxx;__startswith(): 以xxx开头,;__istartswith():不区分大小写以xxx开头, __endswith():以xxx结尾;__iendswith():以xxx结尾不区分大小写

    • 以上使用方法基本上都一致:对象.objects.filter(属性 __xxx) 例子如下:
    >>> author = Author.objects.filter(id__gte=2)
    >>> print author
    <QuerySet [<Author:  fe_cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author:  cu_cow>]>
    • 单独说一个特殊的__in 判断字段在列表内。通常用pk指主键,不限于id,适用更好。
    >>> author_list = Author.objects.values_list('id', flat=True)
    # 返回的是:<QuerySet [1L, 2L, 3L, 4L, 5L, 6L, 7L]>
    >>> Author.objects.filter(pk__in=author)
    <QuerySet [<Author:  fe_cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author:  cu_cow>]>

    方法五:first(), last()获取查询结果中单个对象

    >>> Author.objects.filter(id__gte=2)
    # 返回结果:QuerySet集合
    <QuerySet [<Author:  fe_cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author:  cu_cow>]>
    >>> Author.objects.filter(id__gte=2).first()
    # 返回结果:objects对象  而且返回第一个对象
    <Author:  fe_cow>
    >>> Author.objects.filter(id__gte=2).last()
    <Author:  cu_cow>
    # 返回结果:objects对象 而且返回的是最后一个对象

    方法六:通过values查询

    • values('字段')用字典形式,返回的是指定字段的查询结果;
    >>> Author.objects.values('last_name')
    <QuerySet [{'last_name': u'fecow'}, {'last_name': u'fe_cow'}, {'last_name': u'cow'}, {'last_name': u'cow'}, {'last_name': u'cow'}, {'last_name': u'cow'}, {'last_name': u'cu_cow'}]>
    # 返回字典列表;多个字段间以逗号分隔
    • values_list('字典'),返回的也是指定字段的查询结果
    >>> Author.objects.values_list('last_name')
    <QuerySet [(u'fecow',), (u'fe_cow',), (u'cow',), (u'cow',), (u'cow',), (u'cow',), (u'cu_cow',)]>
    # 返回的是元组列表,多个字段也是用逗号分割
    • values_list('字段', flat=True) flat=True :之后返回的是值列表
    >>> Author.objects.values_list('id', flat=True)
    <QuerySet [1L, 2L, 3L, 4L, 5L, 6L, 7L]>
    # 返回的是列表

    方法六:exclude(**kwargs)反向过滤

    >>> Author.objects.exclude(id__gt=2)
    <QuerySet [<Author:  fecow>, <Author:  fe_cow>]>
    # 取反

    方法七:exists()

    >>> Author.objects.filter(id=2).exists()
    True
    #  QuerySet包含数据返回True
    >>> Author.objects.filter(last_name='Au_cow').exists()
    False
    #  QuerySet不包含数据返回False
    3 修改记录

    方法一:QuerySet.update('字段'='修改的值')

    >>> Author.objects.filter(last_name='cu_cow').update(last_name='Ai_cow')
    1L
    # 修改的前提是先查找,然后调用update(field=val)方法,只有QuerySet集合对象才能调用该方法,也就是说通过get(), first(), last()获取的对象没有该方法。

    方法二:对象赋值

    >>> author_obj = Author.objects.filter(last_name='fe_cow').first()
    >>> author_obj.last_name = 'Fe_cow'
    >>> author_obj.save()
    # 不推荐使用,效率低
    4 删除记录

    调用delete()方法 delete()方法支持QuerySet集合对象的删除,也支持单个对象的删除。

    >>> Author.objects.filter(last_name='fe_cow').delete()
    (1L, {u'apps.Book_authors': 0L, u'apps.Author': 1L})
    # 默认就是级联删除,对应多对多的表也会删除

    QuerySet

    • 通过名字我们也能想到从数据库查出来的结果一般是一个集合,哪怕只有一个对象,也叫集合。

    QuerySet特性

    • 可以进行切片,也可以进行遍历。
    >>> Author.objects.filter(id__gt=2)[:2]  # 使用切片来获取
    # <QuerySet [<Author: fe cow>, <Author: fe cow>]>
    >>> authors = Author.objects.filter(id__gt=2)  # 使用for循环来获取
    >>> for author in authors:
    ...     print author 
    # 打印结果如下
    # fe cow 
    # fe cow
    # fe cow
    # fe cow
    • 惰性机制: 只有使用QuerySet时,才会走数据库。像.all() filter()时,并不会真正执行数据库查询,只是翻译了SQL语句;当我们执行if xxx ,print xxx; for xxx in xxx:这些操作才会执行SQL语句,进行数据库查询。
    • 缓存机制:每次执行了数据库查询后,会将结果放在QuerySet的缓存中,下次在使用QuerySet时, 不会走数据库,直接从缓存中拿取数据。比如:
    >>> author = Author.objects.all()  # 获取所有Author QuerySet中的 last_name
    >>> for res in author:
    ...     print res.last_name  # Ai_cow  cow
    
    >>> Author.objects.create(last_name='COW',first_name='FE')  # 接下来往数据库中插入一跳数据
    >>>for res in author:
            print res.last_name  # Ai_cow  cow   # 发现,已经创建了新的数据,但是表里面没有这条数据
    # 以上结果证明了QuerySet缓存的机制,新添加一条记录;打印结果没有发生改变,说明他不会重新走数据库,而是从缓存中获取数据。
    >>> author = Author.objects.all()  # 获取所有Author QuerySet中的 last_name
    >>> for res in author:
    ...     print res.last_name  # Ai_cow  cow COW
    展开全文
  • python的Web框架,DjangoORM,模型基础,MySQL连接配置及增删改查 Django中ORM简介 ORM概念:对象关系映射(Object Relational Mapping,简称ORM): 用面向对象方式描述数据库,去操作数据库,甚至可以达到不用...
  • python-Flask框架用ajax对数据表实现简单的增删改查 以下为代码实现 Blueprint其实本身只是对view上接口进行了注册,然后整体挂载在app上,Blueprint本身目的就是组织多模块平行共存,避免直接在app上注册...
  •  python也有框架,那就是Django,它是集成框架,这个框架可以执行所有操作,不像SSM是由三个框架组成。 首先,是在pycharm中新建Django项目。 注意:在新建时,目录下还有操作。 打开树形选项,写入项目...
  • 通过创建模型类对象,执行对象save()方法保存到数据库中。 from datetime import date book = BookInfo( btitle=‘西游记’, bpub_date=date(1988,1,1), bread=10, bcomment=10 ) book.save() hero = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 491
精华内容 196
关键字:

python增删改查的框架

python 订阅