zoukankan      html  css  js  c++  java
  • Django之ORM操作!!!

    -------------------------动态URL、ORM操作--------------------------
    创建虚拟环境:
    https://blog.csdn.net/qq_43590972/article/details/89186236
    创建项目分类App
    python manage.py startapp app02
    
    配置python虚拟环境:
    升级pip
    python -m pip install --upgrade pip
    下载virtualenv:
    pip install virtualenv
    安装virtualenv:
    pip install virtualenvwrapper-win
    
    
    一个Project项目可以有多个app模块:
    创建app模块:
    python manage.py startapp app01
    
    app01:
        -admin.py     Django自带的的后台管理相关配置
        -apps.py    
        -model.py    写类的,根据类创建数据库表
        -tests.py    单元测试
        # (多个views.py,可以创建views文件进行分类)
        -views.py    业务处理
        
        3.ORM操作
            http请求:
            url -> 视图(模板+数据)
            ORM操作表:
                创建、修改、删除表
            操作数据行:
                增删改查
            
            ORM利用三方工具连接数据库:
            
            Django默认连接SQLLite
            mysql默认:
                mysql -> MySQLDB()
                
            1.修改配置文件
            DATABASES = {
                    'default': {
                    'ENGINE': 'django.db.backends.sqlite3',
                    'NAME': BASE_DIR / 'db.sqlite3',
                }
            }
            DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'NAME': 'pyday70',  # 要连接的数据库,连接前需要创建好
                    'USER': 'root',  # 连接数据库的用户名
                    'PASSWORD': '123456',  # 连接数据库的密码
                    'HOST': '127.0.0.1',  # 连接主机,默认本级
                    'PORT': 3308,  # 端口 默认3306
                }
            }
            2.将mysql默认连接修改为pymysql
            在项目的初始化文件中加载(__init__.py):
            import pymysql
            pymysql.install_as_MySQLdb()
            -----------------------------------报错------------------------------
            (报错1:django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual tha
                https://blog.csdn.net/xm_QUQ/article/details/101780159
                setting.py—>DATABASES 添加
                ‘OPTIONS’:{‘isolation_level’:None}
                设置隔离级别
            报错2:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required; you have 0.10.1.    
                https://blog.csdn.net/lvluobo/article/details/107850673
                
                import pymysql
                # 指定版本
                pymysql.version_info = (1, 4, 13, "final", 0)
                pymysql.install_as_MySQLdb()  # 使用pymysql代替mysqldb连接数据库
                
            报错3:Django:报错 raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
            原因:Django2.1不再支持MySQL5.5,必须5.6版本以上
                https://www.cnblogs.com/yebaofang/p/9863678.html
                解决办法:
                二选一
                (1)Django降级到2.0
                    pip install Django==2.0.0 -i https://pypi.douban.com/simple
                (2)MySQL升级
            )
        三、models下创建和数据表对应的类
            需要注册:INSTALLED_APPS注册上['app01']
            
            1.    创建数据库表:
                **************    命令:
                **************    python manage.py makemigrations
                **************    python manage.py migrate
                执行上面的语句是会在migrations下面生成py文件
                --------------------------------------------------------------
                class UserGroup(models.Model):
                    title = models.CharField(max_length=32)
                    
                class UserInfo(models.Model):
                    # 设置自增长,主键
                    # nid = models.BigAutoField()
                    # 可以自动生成id,可以不写
                    nid = models.AutoField(primary_key=True)
                    username = models.CharField(max_length=64)
                    password = models.CharField(max_length=32)
                    # 增加一列的时候需要赋初值。null = True 或者 default=1
                    age = models.IntegerField(default=1)
    
                    '''
                    1、
                    # ug_id
                    # Django2.0定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
                    # TypeError: __init__() missing 1 required positional argument: 'on_delete'
                    2、关于别的属性的介绍
                    CASCADE: 这就是默认的选项,级联删除,你无需显性指定它。
                    PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
                    SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank = True, null = True, 定义该字段的时候,允许为空。
                    SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
                    SET(): 自定义一个值,该值当然只能是对应的实体了
                    '''
                    ug = models.ForeignKey("UserGroup", on_delete=models.SET_NULL, null=True, blank=True)
            2.    在views模块的函数中对数据表进行CUDR操作
                def sqlCRUDViews(request):
                    # 导入models模块
                    from app01 import models
                    
                    # 增删改查
                    
                    --------------1.增------------------
                    # models.UserGroup.objects.create(title='销售部')
                    # 没有找到不会添加,也不会报错
                    # models.UserInfo.objects.create(username='root', password='pwd', ug_id=1)
                    
                    --------------2.查--------------
                    # groupList QuerySet对象(可迭代对象) <QuerySet [<UserGroup: UserGroup object (6)>]>
                    # 里面是一个列表,通过遍历将数据拿出来
                    # groupList = models.UserGroup.objects.all()
                    # 过滤,其他判定方式id__gt=1 id__lt=1
                    # groupList = models.UserGroup.objects.filter(id=1)
    
                    -------------3.删除-------------
                    # 注意在级联操作下,删除对数据表的影响
                    # 删除(先找到,然后删除)
                    # models.UserGroup.objects.filter(id=1).delete()
                    # 更新(先找到,然后更新)
                    
                    -------------4.更新--------------
                    # models.UserGroup.objects.filter(id=1).update(title='公关部')
                    print(groupList)
                    return render(request, 'sqlCRUD.html', {'groupList': groupList})
                
  • 相关阅读:
    PEB结构学习
    2016元旦总结
    pwnable.kr的passcode
    PE文件格式(加密与解密3)(一)
    IDA的脚本IDC的一个简单使用
    Python3的tkinter写一个简单的小程序
    2016/12/3-问鼎杯线上赛1-1-Misc
    2016/12/3-问鼎杯线上赛6-2逆向分析
    redis取经之路
    springboot踩坑出坑记
  • 原文地址:https://www.cnblogs.com/854594834-YT/p/13812162.html
Copyright © 2011-2022 走看看