• Python学习第114天(Django中的数据库配置)


    数据库的配置

    1    django默认支持sqlite,mysql, oracle,postgresql数据库。

         <1> sqlite

                django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3

         <2> mysql

                引擎名称:django.db.backends.mysql

    2    mysql驱动程序

    •    MySQLdb(mysql python)
    •    mysqlclient
    •    MySQL
    •    PyMySQL(纯python的mysql驱动程序)

    3     在django的项目中会默认使用sqlite数据库,在settings里有如下设置:

      

    如果我们想要更改数据库,需要修改如下:

      

    DATABASES = {
    
        'default': {
    
            'ENGINE': 'django.db.backends.mysql', 
    
            'NAME': 'books',    #你的数据库名称
    
            'USER': 'root',   #你的数据库用户名
    
            'PASSWORD': '', #你的数据库密码
    
            'HOST': '', #你的数据库主机,留空默认为localhost
    
            'PORT': '3306', #你的数据库端口
    
        }
    
    }

    注意:

    NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建
    
    USER和PASSWORD分别是数据库的用户名和密码。
    
    设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。
    
    然后,启动项目,会报错:no module named MySQLdb
    
    这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL
    
    所以,我们只需要找到项目名文件下的__init__,在里面写入:
    
    import pymysql
    pymysql.install_as_MySQLdb()
    
    问题解决!

    上面这些是mysql的配置,那么关于数据库我们是如何进行创建的呢?

      先说一下SQLit的形式吧

    首先是在app下的modles文件先以类的形式进行创建

    from django.db import models
    
    # Create your models here.
    
    class Book(models.Model):
        name = models.CharField(max_length=10)
        price = models.IntegerField()
        pub_date = models.DateField()

    这里需要特别注意的是,这个类必然继承了models.Model

      同时此时这个类的每个实例对象就相当于数据库下的table中的一行数据

      输入完成后需要执行python manage.py makemigrations

      随后,migration中会多一个文件

     其中的内容如下:

    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='Book',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('name', models.CharField(max_length=10)),
                    ('price', models.IntegerField()),
                    ('pub_date', models.DateField()),
                ],
            ),
        ]

    会自动生成主键(非空且唯一)

    此时在进行执行

    python manage.py migrate

    随后就会产生一堆表格,其中就有你通过类创建的表格

     大致就是这些部分的内容了,然后具体怎么用就到明天,今天的内容还是很多的啊。

    接着是ORM(对象关系映射)

    用于实现面向对象编程语言里不同类型系统的数据之间的转换,换言之,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作。

    优点: 1 ORM使得我们的通用数据库交互变得简单易行,而且完全不用考虑该死的SQL语句。快速开发,由此而来。

              2 可以避免一些新手程序猿写sql语句带来的性能问题。

                比如 我们查询User表中的所有字段:

    新手可能会用select * from  auth_user,这样会因为多了一个匹配动作而影响效率的。

     缺点:1  性能有所牺牲,不过现在的各种ORM框架都在尝试各种方法,比如缓存,延迟加载登来减轻这个问题。效果很显著。

              2  对于个别复杂查询,ORM仍然力不从心,为了解决这个问题,ORM一般也支持写raw sql。

              3  通过QuerySet的query属性查询对应操作的sql语句    

    author_obj=models.Author.objects.filter(id=2)
    print(author_obj.query)

       以上今天的所有内容。。。

  • 相关阅读:
    Android网络框架OkHttp之get请求(源码初识)
    Android Studio运行报错,Cannot find System Java Compiler. Ensure that you have installed a JDK......
    Android基于xmpp的即时通讯应用
    Android 基于Http的多线程下载的实现
    1.3 Quick Start中 Step 3: Create a topic官网剖析(博主推荐)
    1.3 Quick Start中 Step 2: Start the server官网剖析(博主推荐)
    1.3 Quick Start中 Step 1: Download the code官网剖析(博主推荐)
    1.2 Use Cases中 Commit Log官网剖析(博主推荐)
    1.2 Use Cases中 Event Sourcing官网剖析(博主推荐)
    1.2 Use Cases中 Stream Processing官网剖析(博主推荐)
  • 原文地址:https://www.cnblogs.com/xiaoyaotx/p/13170437.html
Copyright © 2020-2023  润新知