zoukankan      html  css  js  c++  java
  • Django models ORM基础操作--白话聊Django系列

      上次我们讲完了views视图,那我们这次来看一下Django强大的ORM,可以这么说,你不懂Django的ORM,你就不懂Django,那废话不多说  

      ORM又称关系对象映射,在ORM里,一张表就是一个类,一行数据就是类的一个对象

      在Django中遵循code first的原则,即:根据代码中定义的类来自动生成数据库表

      利用ORM来实现定义表,以及对表进行操作

      注意:在连接数据库上,Django默认是连接MySQLdb的,但是在python3中,不是很完美的支持这个模块,所以创建的Django项目时,如果python版本为3时,则要在项目名下的init文件里加入下面的代码,如果运行过程中,报错no module named MySQLdb,那就是这个原因了

    import pymysql
    pymysql.install_as_MySQLdb()
    

      另外,Django里的连接方式默认为连接sqllite,如果想切换成其他的连接方式,比如连接MySQL,只需要在配置文件里settings,注释之前的,重新配置新的即可

    #默认数据库连接
    # DATABASES = {
    #     'default': {
    #         'ENGINE': 'django.db.backends.sqlite3',
    #         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    #     }
    # }
    
    #重新配置数据库连接
    DATABASES = {
        'default': {
            #MySQL的数据库引擎
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'django_com',
            'USER':'root',
            'PASSWORD':'',
    
        }
    }
    

       注意:NAME数据库的名字,在mysql连接前,该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite则是在创建项目时自动创建的

      pycharm也支持表格显示数据库数据

      为了能更好的查看数据同步,我们可以直接用pycharm查看的,跳过第三方数据库操作软件Navicate,只需要在pycharm安装相应的数据库驱动即可,具体做法如下:

      右侧栏-->Database--> + -->Data Source-->选择数据库驱动

      点击download后,设置后数据名和用户名和密码,点击apply和ok,就可以了,直接可以在pycharm点击查看数据库表,如果你用的是sqlite数据库就更简单了,直接将sqlite拖动到Database就可以了

      前奏说多了,接下来我看看怎么用ORM实现对数据的增删改查

      首先我们必须创建表,那就要定义表类了,并且继承某个类,在Django中的要继承的类是models.Model

    class UserInfo(models.Model):
        name = models.CharField(max_length=24)
        age = models.IntegerField()
        sex = models.BooleanField(max_length=1,choices=((0,'男'),(1,'女'),))
        email = models.EmailField()
        home_adr = models.CharField(max_length=56)
    
        def __str__(self):
            return self.name
    

       Django提供很多的字段,这些字段辅助form表单验证

      接下来的是操作数据

      增:create   和   对象.save

    def create_data1(**kwargs):
        ret = models.Author.objects.create(**kwargs)
    
    def create_data2(**kwargs):
        ob = models.Author(**kwargs)
        ob.save()
    

      删:delete

    def delete_data(**kwargs):
        models.Author.objects.filter(**kwargs).delete()
    

      改:update

    def update_data(**kwargs):
        models.Author.objects.filter(**kwargs).update(name='laoliu')
    

       查:all  first  get  filter  values

    #取所有
    def find_data_all(**kwargs):
        r = models.UserInfo.objects.all()
        return r
    
    #取某一个,获取不到报错
    def find_data_one(**kwargs):
        r = models.UserInfo.objects.get(**kwargs)
        return r
    
    #取第一个
    def find_data_first(**kwargs):
        r = models.UserInfo.objects.first()
        return r
    
    #筛选条件查,多个对象
    def find_data_filter(**kwargs):
        r = models.UserInfo.objects.filter(**kwargs)
        return r
    
    #筛选字段查,多个对象
    def find_data_value(*args):
        r = models.UserInfo.objects.values(*args)
        return r
    
  • 相关阅读:
    CDQ分治入门
    BSGS算法初探
    简析平衡树(三)——浅谈Splay
    简析平衡树(一)——替罪羊树 Scapegoat Tree
    NOIP2018初赛 解题报告
    【BZOJ1101】[POI2007] Zap(莫比乌斯反演)
    WQS二分学习笔记
    【洛谷2664】树上游戏(点分治)
    同余问题(一)——扩展欧几里得exgcd
    二叉搜索树(BST)学习笔记
  • 原文地址:https://www.cnblogs.com/xinsiwei18/p/7191034.html
Copyright © 2011-2022 走看看