django之十--连接mysql数据库和创建数据表
Django对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
Django为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。
一、django模型 Django对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。 Django为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。 MySQL是Web应用中最常用的数据库。 这篇博客,我们将以Mysql作为实例进行介绍。 如果你想了解更多MySQL的基础知识,可以查看该菜鸟教程地址:???? 二、第三方库mysqlclient的安装 细节:python要操作mysql数据库,需要安装一个第三方库【mysqlclient】,该第三方库【mysqlclient】其实是一个mysql驱动。 1、第一步:使用命令【pip installmysqlclient 】,可以下载并安装最新版本的mysqlclient。 2、第二步:接着,使用命令【pip list】,可以查看mysqlclient目前版本号。 三、python操作mysql的完整步骤(假设这个django项目【helloworld】是全新项目,未创建过一个数据库) 1.第一步:我们要在本地mysql数据库创建一个新数据库,比如一个名为【hongjingsheng_project】的新数据库。 细节: 因为django自带的orm框架只能操作数据表,不能操作数据库,所以数据库需要我们自己在本地电脑手动用mysql命令行或者用navicate工具进行创建(我选择的是用navicate工具进行创建)。 2、第二步:接着,我们查看django项目【helloworld】里的路径为【helloworld/helloworld/settings.py】这个py文件里的属性【DATABASES】的系统提供的默认数据。 细节:属性【DATABASES】的具体使用,可以查看django官方文档地址:?? 3、第三步:因为我们的django项目【helloworld】需要使用mysql数据库当成存储项目数据的数据库,所以我们接着要对django项目【helloworld】里的路径为【helloworld/helloworld/settings.py】这个py文件里的属性【DATABASES】值进行如下更改。 属性【DATABASES】的数据类型为字典,在属性【DATABASES】里的【DATABASES["default"]["ENGINE"]】,这个【ENGINE】含义是:连接数据库驱动的名称。名称有以下几种情况: 4、第四步:我们在django项目【helloworld】里,通过命令行新建一个应用【hello】(在之前博客里有提到这步骤怎么操作,该应用【hello】已创建过了,在这里就不需要重复创建了)。 5、第五步:我们将应用【hello】添加到 django项目【helloworld】里的路径【helloworld/helloworld/settings.py】里的属性 INSTALLED_APPS中,也就是告诉django框架在django项目【helloworld】里有这么一个应用【hello】。(在之前博客里有提到这步骤怎么操作,该应用【hello】已被添加到属性 INSTALLED_APPS,在这里就不需要重复添加了)。 6、第六步:修改django项目【helloworld】里对应路径【helloworld/hello/models.py】的这个models.py里的代码内容。 细节:从上面截图可以看到,我们新建了一个子类Person,子类Person继承自父类models.Model, 这个子类Person有属性name(name表示姓名)和属性age(age表示年龄)。 这里用到了两种类:类CharField和类IntegerField,更多这种类的使用等后续相关博客里再编写。 注意事项:如果要实现创建多个数据表,可以在models.py里创建多个不同类名的类,具体操作可以看官方文档地址:???? 7、第七步:通过相关命令行,在一个指定的数据库里创建相关的表结构/表(备注:表结构其实也就是表,叫法不一样而已)。(在实际开发过程中,【3.7.第七步】这步骤可以忽略,但为了写完整的操作流程,这步也就大概写了一些主要操作内容。) 7.1、首先,在还没创建任何一个应用的表结构之前,我们可以看到django项目【helloworld】对应的路径【helloworld/hello/migrations】的该migrations文件夹里只有一个【__init__.py】。 7.2、接着,我们在路径【helloworld/】下, 7.2.1、首先,假设我们在【settings.py】该脚本文件里把【'ENGINE'】的值错误填写为【'django.db.backends.'】,然后执行命令行【python manage.py migrate】。(【3.7.2.1】这部分内容只是为了教大家怎么按照报错日志去简单定位问题,可以忽略不看) 终端执行命令:python manage.py migrate后: 7.2.2、假设我们在【settings.py】该脚本文件里把【'ENGINE'】的值正确填写为【'django.db.backends.mysql'】,然后第一次成功执行命令行【python manage.py migrate】。 报错了: 解决Django执行manage.py 提示 NameError: name '_mysql' is not defined 问题 原因是: Mysqldb 不兼容 python3.5 以后的版本 解决方法: 使用pymysql代替MySQLdb 步骤: import pymysql 一个好办法,直接指定版本,比其他的解决方法简单一些: import pymysql 成功执行【python manage.py migrate】后: 细节:这些日志表示已经成功帮我们在指定数据库里生成相关的数据表了。 8、为了让django框架知道我们在具体哪个应用里的models.py里内容有一些变更,需要做接下来的操作。 我们现在以一个应用【hello】为数据来进行接下来的讲解。 8.1.首先,我们在路径【helloworld/】下,执行命令行【python manage.py makemigrations hello】。 细节: (1)、要迁移一个指定应用名的数据表信息,命令行为【python manage.py makemigrations应用名】。 (2)、这个命令行【python manage.py makemigrations hello】执行成功后会实现的功能是:只是会在这个【hello】应用里的唯一文件名为【migrations】的文件里生成相关迁移文件,这些迁移文件有涉及了哪些需要新增和修改的数据表信息,但还不会执行在指定数据库里生成相关数据表的操作!(这些迁移文件在【3.9】章节里提到的一个新命令成功执行后,就会执行在指定数据库里创建相关数据表的操作!) (3)、要迁移一个指定django项目里的所有应用的数据表信息创建数据库表,比如迁移我们这个django项目【helloworld】里的所有应用的数据表信息,命令行为【python manage.py makemigrations】。 9、第九步:接着,为了让django框架知道我们要针对哪个应用进行数据表的新增和修改,需要做接下来的操作。 我们现在仍然以一个应用【hello】为数据来进行接下来的讲解。 9.1、首先,我们在路径【helloworld/】下,执行命令行【python manage.pymigrate hello】。 细节: (1)、要在指定数据库里创建一个指定应用名包含的最新的数据表信息,命令行为【python manage.py migrate 应用名】。 (2)、这个命令行【python manage.pymigrate hello】执行成功后会实现的功能是:在指定数据库名为【hongjingsheng_project】的数据库里生成一个应用名为【hello】的应用包含的最新的数据表信息。) (3)、要在指定数据库里生成一个指定django项目里的所有应用的数据表信息,比如生成我们这个django项目【helloworld】里的所有应用的数据表信息,命令行为【python manage.py migrate】 细节: (1)、生成的数据表的表名的取值规则为:应用名_类名(注意:类名的第一个大写字母会被转化为小写字母)(如:hello_person)。 (2)、尽管我们没有在【hello】应用里的models.py给person表设置主键,但是django框架会自动添加一个id作为person表的主键。 (3)、【python manage.py makemigrations】 和 【python manage.py makemigrations 应用名】和 【python manage.py migrate】和【python manage.py migrate 应用名】,这四个命令行的更具体使用和区别可以看下这位大牛写的博客地 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |