• Django数据库的查看、删除,创建多张表并建立表之间关系


    配置以下两处,可以方便我们直接右键运行tests.py一个文件,实现对数据库操作语句的调试:

    settings里面的设置:

    #可以将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',
            },
        }
    }

    tests.py的配置

    # 这样设置是方便我们直接在这里里面操作运行,就可以看效果
    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day08.settings")
        import django
        django.setup()
    
        # 导入models里面的Book模块,用于在这里引用
        from app01.models import *
    
        book=Book.objects.all().filter(publish='中央出版社88')
        print(book)
        book = Book.objects.all().filter(nid=1)
        print(book)
    
        #下面就可以写一些对数据库操作的命令,在本窗口就可以实现调试
        # 查询name里面以红字开头的
        book=Book.objects.all().filter(name__startswith='')
        print(book.values_list()) #<QuerySet [(3, '红楼梦', Decimal('30.00'), datetime.date(2001, 1, 12), '作者2', '上海出版社')]>
        .......

    数据库的查看操作:

     #基于双下划线的模糊查询
        # 查询name里面以红字开头的
        book=Book.objects.all().filter(name__startswith='')
        print(book.values_list()) #<QuerySet [(3, '红楼梦', Decimal('30.00'), datetime.date(2001, 1, 12), '作者2', '上海出版社')]>
    
        #查询name里面以传字结尾的
        book=Book.objects.all().filter(name__endswith='')
        print(book) #<QuerySet [<Book: 水浒传>, <Book: 自传>]>
    
        #查询name里面包含果字的
        book=Book.objects.all().filter(name__contains='')
        print(book) #<QuerySet [<Book: 三国演义>, <Book: 国策>]>
        #name__icontains查询的时候不区分大小写,都能匹配到
    
        #查询在后面列表里面的id
        book=Book.objects.filter(nid__in=[1,2,3,4]) #匹配到4本
        print(book) #<QuerySet [<Book: 三国演义>, <Book: 书1>, <Book: 红楼梦>, <Book: 小红薯>]>
    
        #nid大于26的数据
        book=Book.objects.all().filter(nid__gt='26')
        #nid小于3的数据
        book = Book.objects.all().filter(nid__lt=3)
        #nid小于等于3的数据
        book=Book.objects.filter(nid__lte='3') #包含nid=3
    
        #nid大于等于26的数据
        book=Book.objects.filter(nid__gte='26') #包含nid=26
        print(book)
    
        #查找id在列表范围内的数据(注意,包含1和3)
        # book=Book.objects.all().filter(nid__range=[1,3])
        # print(book)
    
        #查找>=10 并且 <=15的值
        book=Book.objects.all().filter(price__gte=20,price__lte=24)
        print(book) #<QuerySet [<Book: 三国演义>, <Book: 书1>, <Book: 国策>]>
    
        #根据出版日期查询,年、月、日
        book=Book.objects.filter(pub_date__year=1997)
        book=Book.objects.filter(pub_date__month=2)
        book=Book.objects.filter(pub_date__day=11)
        book=Book.objects.filter(pub_date__day__in=[12,5])

    数据库的删除操作:

        #删除
        #queryset来删除
        ret=Book.objects.filter(nid=20).delete()
        print(ret) #(1, {'app01.Book': 1})
        #对象来删除
        ret = Book.objects.filter(nid=18).first() #书2
        ret = Book.objects.filter(nid=19).first().delete()
        print(ret) #(1, {'app01.Book': 1})  1:本次操作总共影响了多少条记录   1:本张表里面影响的记录数
    
        #manager对象不行,例如:
        ret=Book.objects.delete()
    
        #这个可以,清空表里所有数据信息
        ret=Book.objects.all().delete()  #不要轻易使用

    数据库的更改操作:

    #更新(更新)
        #返回的结果是int类型,只能queryset对象来调用,对象不能来调用,返回的结果是int类型
        #例如下面first对象调用就报错:
        ret=Book.objects.all().filter(nid=9).first().update(name='aaa')  #错误的写法,不能用对象调用
        print(ret)  #报错 'Book' object has no attribute 'update'
    
        ret = Book.objects.all().filter(nid=9).update(name='书9999')
        print(ret)  #1
    
        ret = Book.objects.all().filter(nid=10).update(name='书10书10',price=1.1) #可以同时改几个字段
        print(ret) #1

    Django创建多张表并建立表之间的关系:

    创建环境的注意点如下:

    第一步:创建Django项目
    第二步:创建static文件夹目录并,并在settings.py里面添加文件路径(此步骤本项目暂时没用到)
        
                STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'static')
    ]
    
    第三步:settings.py里面这一行注释掉:
               # 'django.middleware.csrf.CsrfViewMiddleware',
    
    第四步:app01---下面的---__init__.py文件下面设置,指定对mysql数据库的操作
            import pymysql
            pymysql.install_as_MySQLdb()          
    
    第五步:settings里面设置连接mysql数据库的信息,例如地址、端口、数据库名字、用户名、密码 等
    DATABASES = {
        # 'default': {
        #     'ENGINE': 'django.db.backends.sqlite3',
        #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        # }
    
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'info',
            'HOST':'127.0.0.1',
            'PORT':3306,
            'USER':'root',
            'PASSWORD':'root',
    
        }
    
    }
    
    第六步:models里面设置class类(即单独设置每张表的字段、格式、以及关联关系等)
    
    第七步:运行命令将将信息录入的数据库中
    python3 manage.py makemigrations
    python3 manage.py migrate
    
    第八步:接下来就是对数据表的增、删、改、查操作
    

    models.py里面的设置:

    from django.db import models
    
    # Create your models here.
    
    #出版社表
    class Publish(models.Model):
        nid=models.AutoField(primary_key=True)
        name=models.CharField(max_length=32)
        addr=models.CharField(max_length=64)
        email=models.EmailField()
    
    #作者表(与AuthorDetail是一对一关系)
    class Author(models.Model):
        nid=models.AutoField(primary_key=True)
        name=models.CharField(max_length=32)
        age=models.IntegerField()
        #建立与AuthorDetail一对一关系
        authordetail=models.OneToOneField(to='AuthorDetail',to_field='nid')
        
    #作者详细信息表
    class AuthorDetail(models.Model):
        nid=models.AutoField(primary_key=True)
        phone=models.CharField(max_length=32)
        email=models.EmailField()
    
    #书籍表
    class Book(models.Model):
        nid=models.AutoField(primary_key=True)
        price=models.DecimalField(max_digits=5,decimal_places=2)
        pub_date=models.DateField()
        #与出版社绑定一对多关系
        publish=models.ForeignKey(to='Publish',to_field='nid')
        #与作者绑定多对多关系(会生成第三张表)
        authors=models.ManyToManyField(to='Author')

     建完之后关系图如下:

  • 相关阅读:
    .net的25个小技巧
    使用ASP.Net2.0国际化你的网站祥解
    国外C#开源项目(转)
    千千阙歌
    js中var的有或无重复声明和以后的声明
    XMLHttpRequest
    java参数与引用
    Total Commander
    XMLDOM 的async属性
    Java内嵌类
  • 原文地址:https://www.cnblogs.com/yangzhizong/p/9621763.html
Copyright © 2020-2023  润新知