Django从零开始(五)

ORM

  ORM是Object Relation mappiong,简单来说就是将编程语言中的对象映射到数据库中。这边的对象就是数据库中的各种表,ORM模型作用在于编程人员更换数据库引擎时,不必每次

  重新编写sql语句,只要通过编程语言自动生成对应的sql语句,这样大大地提升了效率。

  python下的ORM:在应用目录下的models下可以编写要映射到数据库的表,格式如下

  

class Book(models.Model):
    id = models.AutoField(primary_key=True) #auto为自增型
    title = models.CharField(max_length=32) #char为字符型
    state = models.BooleanField()           #Boolean为布尔型
    pub_data = models.DateField()       #Date为日期型
    price = models.DecimalField(max_digits=8,decimal_places=2) #Decimal为十进制小数
    publish = models.CharField(max_length=32)

  其中数据类型和mysql很多相似,只是语法变了。

  django引入ORM时,要在主目录下的_init__文件下写入:

import pymysql
pymysql.install_as_MySQLdb()

  因为django默认的数据库驱动为MySQLdb,python3与其兼容有问题,所以要是用pymysql作为驱动。

  同时主目录下settings文件中的databases属性要改为:

  

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',#引擎驱动
        'NAME': 'orm',  #数据库名
        'USER': 'root', #用户名
        'password': '',  #密码
        'HOST': '127.0.0.1', #ip
        'port': 3306,    #端口号
    }
}

  注意事项:python3.4以上版本和django2.0以上版本共同使用时,会报错。因为MySQLclient只支持到python3.4,所以要将项目下的报错的目录,Lib\site-packages\django\db\backends\mysql\中的如下代码注释。

if version < (1, 3, 13):
   raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

  然后使用python(python3) manage.py makemigrations:

  

  再使用python manage.py migrate:

  

  最后在mysql数据库中可以看到新建的表:

  

产生了一个app01_book的表,还有一些其他自动生成的很多表。其中app01_book的字段:

  

  最后如果想在控制台看到ORM将类转换为sql语句的过程,可以在settings文件下加上:

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

一、单表操作

  当model下创建了表类时,在views下可以控制表的操作

  (1)添加  

def index(request):
    #添加记录
        # 方式1:
    # book_obj = Book(id=1,title='pythonredbook',state=True,price=100,pub_data='1019-6-28',
    #      publish='cn')
    # book_obj.save()
        # 方式2:create返回的就是对象记录
    Book.objects.create(title='linux',state=False,price=88,pub_data='2020-6-28'
                        ,publish='ua')
    return HttpResponse('ok')

    在mysql数据里可以看到创建的表记录

    


  (2)查询和模糊查询

      

  (3)删除

  (4)修改

二、

猜你喜欢

转载自www.cnblogs.com/alex2yang/p/11097508.html