Django 数据迁移命令与创建子项目,Django打印 sql 语句配置,Django(ORM)对表字段的增删改查,Django单表查询,基于单表的双下划线模糊查询

Django 数据迁移命令,创建子项目,手动创建用户


创建app01:  python3 manage.py startapp app01
Django 数据迁移命令
    (1)python3 manage.py makemigrations        对数据做记录
    (2)python3 manage.py migrate               提交到数据库
    (3)python3 manage.pu showmigrations        查看哪个数据没有提交到数据库
   (4) python3 manage.py creatsuperuser 创建超级用户

Django打印 sql 语句

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'DEBUG',
        },
    }
}
settings里配置

Django 单表操作

链接表

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'NAME':'day76',
        'USER':'root',
        'PASSWORD':'321',
        'HOST':'127.0.0.1',
        'PORT':'3306'
    }
}
seetings配置文件里

创建表

创建字段名

from django.db import models
# Create your models here.
class Book(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5,decimal_places=2)
    publish = models.CharField(max_length=32)
    auther = models.CharField(max_length=32,default='')
    create_data = models.DateField(null=True)

__init__文件里

import pymysql
pymysql.install_as_MySQLdb()

最后通过两条数据库迁移命令即可在指定的数据库中创建表 :

(1)python3 manage.py makemigrations        对数据做记录
(2)python3 manage.py migrate               提交到数据库

确保配置文件中的INSTALLED_APPS中写入我们创建的app名称

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

 列操作-增加删除字段名         

删除,直接注释掉字段,执行数据库迁移命令即可

新增字段,在类里直接新增字段,直接执行数据库迁移命令会提示输入默认值,可以自己设置默认值

 auther = models.CharField(max_length=32,default='')

行操作-添加表记录 

增:(时间格式可以传 时间格式/字符串/日期格式 )
    (1)Book = models.Book.objects.create(name='西游记',price='2.8',publish='人名出版社',
                                         auther='吴承恩',create_data=datetime.datetime.now())
    (2)Book = models.Book(name='水浒传',price='5.8',publish='浙江出版社',
                          author='施耐庵',create_data='2018-9-15')
       Book.save()

行操作-删除表记录 

删:
    (1)models.Book.objects.filter(id=1).delete()
    (2)ret = models.Book.objects.filter(name='西游记').first()
        ret.delete()

行操作-改表记录 

改:
    (1)models.Book.objects.filter(name='三国').update(name='七国',auther='啊三')
    (2)obj = models.Book.objects.filter(name='七国').first()
         obj.name = '八国'
         obj.save()

行操作-单表查询相关操作

(1)all() 所有
(2)filter() 过滤
(4)get()     有且只有一个结果,才能用,如果有一个,返回的是对象,不是queryset对象,通常用在,用id查询的情况
(5)exclude()    查询名字不叫 红楼梦 的书
(6)order_by() 排序,默认升序
(7)reverser()   有顺序才能反序
(8)count  计算结果的次数
(9)last() 最后一个
(10)exists()    返回布尔类型,是否存活
(11)values('name','price')  列表里套字典
(12)values_list() 列表里套元组
(13)distinct 去重  必须完全一样,才能去重   只要带了id,去重就没有意义了
 查:
        (1)all()所有
                models.Book.objects.all()
        (2)filter()过滤
                obj_list = models.Book.objects.filter(name='红楼梦').first()
                obj_list = models.Book.objects.filter(name='红楼梦')[0]    *索引不支持负数
                obj_list = models.Book.objects.filter(name='红楼梦',create_data='2012-07-07')          *传多个参数是 and 的意思
        (4)get()     有且只有一个结果,才能用,如果有一个,返回的是对象,不是queryset对象,通常用在,用id查询的情况
                obj = models.Book.objects.get(name='红楼梦')
                print(obj.name)
        (5)exclude()    查询名字不叫 红楼梦 的书
            obj = models.Book.objects.exclude(name='红楼梦')
            print(obj)
            obj = models.Book.objects.exclude(name='红楼梦',price='6.8')   *传多个参数是 and 的意思
        (6)order_by() 排序,默认升序
            obj_list = models.Book.objects.order_by('price')    升序
            obj_list = models.Book.objects.order_by('-price')   降序
            obj_list = models.Book.objects.order_by('-price','create_data')   传多个参数优先排前面的
        (7)reverser()   有顺序才能反序
             models.Book.objects.order_by('-price').reverser()
        (8)count  计算结果的次数
            con = models.Book.objects.all().count()
            con = models.Book.objects.filter(name = '红楼梦').count()
        (9)last 最后一个
            con = models.Book.objects.last()
            print(con)
        (10)exists()    返回布尔类型,是否存活
            con = models.Book.objects.filter(name= '三国').exists()
            print(con)
        (11)values('name','price')  列表里套字典
            con = models.Book.objects.all().values()
            con = models.Book.objects.all().values('name','price')
            print(con)
        (12)values_list() 列表里套元组
            con = models.Book.objects.all().values_list('name','price')
            print(con)
        (13)distinct 去重  必须完全一样,才能去重   只要带了id,去重就没有意义了
            con = models.Book.objects.all().values('name').distinct()
            print(con)
eg:

行操作-单表模糊查询

__gt 大于
__gte 大于或等于

__lt 小于 __lte 小于或等于 __in 在……里 __range[50,100] # 在……里,首尾都能取到
__isnull=0|1 # 0:is not null | 1:is null 是否为空

# 字符串相关
__startswith # 后方模糊匹配
__endswith # 前方模糊匹配
__contains # 前后方均模糊匹配
__regex # 正则匹配
__istartswith # 不区分大小写后方模糊匹配(i开头就是不区分大小写)
__contains 包含有……的书,查询名字有'%红%'的书 
__icontains 包含有……的书,忽略大小写
__startswith 以……开始
__endswith 以……结尾

时间模糊查找:
  __year
/__month/__day 按年/月/日查询
eg:
  birthday__year=2008 # 时间年份模糊匹配
        (1__gt 大于
        __gte 大于或等于
            con = models.Book.objects.filter(price__gt='5')
            print(con)

        (2__lt 小于
        __lte 小于或等于
            con = models.Book.objects.filter(price__lt='5')
            print(con)

        (3__in 在……里
            con = models.Book.objects.filter(price__in=['1','2','3.80'])
            print(con)

       (4__range[50,100]  在……里,首尾都能取到
        con = models.Book.objects.filter(price__range=['3.80','5.8'])
        print(con)

       (5__contains 包含有……的书,查询名字有'%红%'的书
        __icontains 包含有……的书,忽略大小写
            con = models.Book.objects.filter(name__contains='')
            print(con)
        (6__startswith 以……开始
        __endswith  以……结尾
            con = models.Book.objects.filter(name__startswith='')
            print(con)
        (6__year/__month/__day 按年/月/日查询
        con = models.Book.objects.filter(create_data__month='11')
        print(con)
eg:模糊查询实测数据
作业
1 查询老男孩出版社出版过的价格大于200的书籍
2 查询2017年8月出版的所有以py开头的书籍名称
3 查询价格为50,100或者150的所有书籍名称及其出版社名称
4 查询价格在100到200之间的所有书籍名称及其价格
5 查询所有人民出版社出版的书籍的价格(从高到低排序,去重)
6 查找所有书名里包含楼的书
7 查找出版日期是2017年的书
8 查找出版日期是2017年的书名
9 查找价格大于10元的书
10 查找价格大于10元的书名和价格
 (1).filter(publish='老男孩出版社',price__gt='200')
(2) .filter(create_data__year).filter(create_data__month).filter(name__startswith = 'py').values('name')
(3).filter(price__in = [50,100,150]).values('name','publish')
(4).filter( price__range = [100,200] ).values('name','price)
(5).filter(publish='人民出版社').order_by('-price').values('name').distinct().values('price')
(6).filter( name__contains = '' )
(7).filter( name__year = '2017' )
(8).filter( create_data__year = '2017' ).values('name')
(9).filter(price__gt='10')      __gt 大于    __lt小于10).filter(price__gt='10').values('name','price')
答案

 

posted @ 2018-11-12 22:22  星牧  阅读(829)  评论(0编辑  收藏  举报