目录

一.Django3.0连接MySql8.0准备

二.安装pymysql

三.安装mysqlclient

错误解决方法:

四.使用PyCharm的可视化数据库管理工具,连接Mysql8创建数据库

四.创建Django3数据模型

模型字段及属性

五.迁移数据模型

1.首先在setting配置文件中注册应用

2.修改数据库连接为mysql,同样是在setting配置文件中修改

3.添加数据库模块引用到应用目录的__init__.py文件中

4.在终端中执行迁移命令


一.Django3.0连接MySql8.0准备

Django3+Python3.8连接MySQL8需要使用到pymysql、mysqlclient、以及Mysql8.0。

那么我们在项目中使用时必须有这些模块的支持。

下面我们先进行安装。

以下所有的操作都在Mac系统,PyCharm 、 Pyhton3.8、Django3、MySql8.0中进行。

首先要安装Mysql8.0和创建Django的项目,如果不会请查看之前的文章。

二.安装pymysql

使用PyCharm开发工具打开项目,并在终端窗口运行如下命令即可安装成功。

安装命令:pip install pymysql

(venv) aije@bogon test1 % pip install pymysql
Collecting pymysqlUsing cached PyMySQL-0.10.0-py2.py3-none-any.whl (47 kB)
Installing collected packages: pymysql
Successfully installed pymysql-0.10.0
(venv) aije@bogon test1 % 

三.安装mysqlclient

在安装mysqlclient时会出现报错,如下:

报错内容:

Collecting mysqlclientUsing cached mysqlclient-2.0.1.tar.gz (87 kB)ERROR: Command errored out with exit status 1:command: /Users/aije/PycharmProjects/myFirstDjango/venv/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/sh/rl5794vx3t3cngg_zj2sn89h0000gn/T/pip-install-owe2jod7/mysqlclient/setup.py'"'"'; __file__='"'"'/private/var/folders/sh/rl5794vx3t3cngg_zj2sn89h0000gn/T/pip-install-owe2jod7/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /private/var/folders/sh/rl5794vx3t3cngg_zj2sn89h0000gn/T/pip-pip-egg-info-n801ts13cwd: /private/var/folders/sh/rl5794vx3t3cngg_zj2sn89h0000gn/T/pip-install-owe2jod7/mysqlclient/Complete output (12 lines):/bin/sh: mysql_config: command not found/bin/sh: mariadb_config: command not found/bin/sh: mysql_config: command not foundTraceback (most recent call last):File "<string>", line 1, in <module>File "/private/var/folders/sh/rl5794vx3t3cngg_zj2sn89h0000gn/T/pip-install-owe2jod7/mysqlclient/setup.py", line 15, in <module>metadata, options = get_config()File "/private/var/folders/sh/rl5794vx3t3cngg_zj2sn89h0000gn/T/pip-install-owe2jod7/mysqlclient/setup_posix.py", line 65, in get_configlibs = mysql_config("libs")File "/private/var/folders/sh/rl5794vx3t3cngg_zj2sn89h0000gn/T/pip-install-owe2jod7/mysqlclient/setup_posix.py", line 31, in mysql_configraise OSError("{} not found".format(_mysql_config_path))OSError: mysql_config not found----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

根据错误提示,

/bin/sh: mysql_config: command not found
/bin/sh: mariadb_config: command not found
/bin/sh: mysql_config: command not found

可能是没有安装mysql,可是我已经安装了mysql8.0。但为什么还提示错误。

经过查找发现在virtualenv虚拟环境终端窗口运行mysql提示:无法识别mysql命令

(venv) aije@bogon myFirstDjango % mysql
zsh: command not found: mysql

由于我的系统是Mac OS环境变量设置有问题,导致虚拟环境中无法识别mysql。

解决方法:

我用的是Mac OS系统,运行如下命令,将mysql环境变量重新指向,并重新安装mysqlclient

(venv) aije@bogon myFirstDjango % PATH="$PATH":/usr/local/mysql/bin
//测试mysql命令是否识别
(venv) aije@bogon myFirstDjango % mysql
//已经识别,只是没事输入mysql地址和密码,无法连接。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
//重新安装mysqlclient,成功
(venv) aije@bogon myFirstDjango % pip install mysqlclient
Collecting mysqlclientUsing cached mysqlclient-2.0.1.tar.gz (87 kB)
Using legacy 'setup.py install' for mysqlclient, since package 'wheel' is not installed.
Installing collected packages: mysqlclientRunning setup.py install for mysqlclient ... done
Successfully installed mysqlclient-2.0.1

四.使用PyCharm的可视化数据库管理工具,连接Mysql8创建数据库

至此,已经使用PyCharm可视化数据库界面创建了一个TestDB数据库

下面我们将在Django项目中使用模型来创建数据库中的表

四.创建Django3数据模型

首先创建模型,打开应用下的models.py文件,在文件中键入如下代码:

from django.db import models# Create your models here.
#user_manager即为需要创建的表名
class user_manager(models.Model):#manager_id为表中的字段名,models.AutoField(primary_key=True)为自增长主键  manager_id = models.AutoField(primary_key=True)manager_name = models.CharField(max_length=25)

模型字段及属性

一、常用字段:

1、AutoField   ---自增列 = int(11)    如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。

2、CharField   ---字符串字段  单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。必须 max_length 参数,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。

3、BooleanField   ---布尔类型=tinyint(1)   不能为空,Blank=True

4、ComaSeparatedIntegerField   ---用逗号分割的数字=varchar   继承CharField,所以必须 max_lenght 参数,

5、DateField   ---日期类型 date   对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。

6、DateTimeField   ---日期类型 datetime   同DateField的参数

7、Decimal   ---十进制小数类型 = decimal   必须指定整数位max_digits和小数位decimal_places

8、EmailField   ---字符串类型(正则表达式邮箱) =varchar   对字符串进行正则表达式   一个带有检查 Email 合法性的 CharField,不接受 maxlength 参数。

9、FloatField   ---浮点类型 = double   浮点型字段。 必须提供两个 参数, 参数描述:

max_digits:总位数(不包括小数点和符号)

decimal_places:小数位数。如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百万(小数点后保存10位)的话,你要这样定义:FloatField(…,max_digits=19, decimal_places=10)

10、IntegerField   ---整形   用于保存一个整数

11、BigIntegerField   ---长整形

integer_field_ranges = {'SmallIntegerField': (-32768, 32767),'IntegerField': (-2147483648, 2147483647),'BigIntegerField': (-9223372036854775808, 9223372036854775807),'PositiveSmallIntegerField': (0, 32767),'PositiveIntegerField': (0, 2147483647),
}

12、IPAddressField   ---字符串类型(ip4正则表达式)   一个字符串形式的 IP 地址, (如 “202.1241.30″)。

13、GenericIPAddressField   ---字符串类型(ip4和ip6是可选的)   参数protocol可以是:both、ipv4、ipv6   验证时,会根据设置报错

14、NullBooleanField   ---允许为空的布尔类型   类似 BooleanField, 不过允许 NULL 作为其中一个选项。 推荐使用这个字段而不要用 BooleanField 加 null=True 选项。 admin 用一个选择框     <select> (三个可选择的值: “Unknown”, “Yes” 和 “No” ) 来表示这种字段数据。

15、PositiveIntegerField   ---正Integer   类似 IntegerField, 但取值范围为非负整数(这个字段应该是允许0值的…可以理解为无符号整数)

16、PositiveSmallIntegerField   ---正smallInteger  正小整型字段,类似 PositiveIntegerField, 取值范围较小(数据库相关)SlugField“Slug” 是一个报纸术语。 slug 是某个东西的小小标记(短签), 只包  含字母,数字,下划线和连字符。它们通常用于URLs。 若你使用 Django 开发版本,你可以指定 maxlength。 若 maxlength 未指定, Django 会使用默认长度: 50,它接受一个额外的参数:

prepopulate_from: 来源于slug的自动预置列表

17、SlugField   ---减号、下划线、字母、数字   它们通常用于URLs。

18、SmallIntegerField   ---数字   数据库中的字段有:tinyint、smallint、int、bigint.   类似 IntegerField, 不过只允许某个取值范围内的整数。(依赖数据库)

19、TextField   ---字符串=longtext ,一个容量很大的文本字段, admin 管理界面用 <textarea>多行编辑框表示该字段数据。

20、TimeField   ---时间 HH:MM[:ss[.uuuuuu]]   时间字段,类似于 DateField 和 DateTimeField。

21、URLField   ---字符串,地址正则表达式   用于保存URL。若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在(即URL是否被有效装入且没有返回404响应).

22、BinaryField   ---二进制

23、ImageField   ---图片   类似 FileField, 不过要校验上传对象是否是一个合法图片。用于保存图像文件的字段。其基本用法和特性与FileField一样,只不过多了两个属性height和width。默认情况下,该字段在HTML中表现为一个ClearableFileInput标签。在数据库内,我们实际保存的是一个字符串类型,默认最大长度100,可以通过max_length参数自定义。真实的图片是保存在服务器的文件系统内的。

height_field参数:保存有图片高度信息的模型字段名。width_field参数:保存有图片宽度信息的模型字段名。

使用Django的ImageField需要提前安装pillow模块,pip install pillow即可。

使用FileField或者ImageField字段的步骤:

在settings文件中,配置MEDIA_ROOT,作为你上传文件在服务器中的基本路径(为了性能考虑,这些文件不会被储存在数据库中)。再配置个MEDIA_URL,作为公用URL,指向上传文件的基本路径。请确保Web服务器的用户账号对该目录具有写的权限。

添加FileField或者ImageField字段到你的模型中,定义好upload_to参数,文件最终会放在MEDIA_ROOT目录的“upload_to”子目录中。

所有真正被保存在数据库中的,只是指向你上传文件路径的字符串而已。可以通过url属性,在Django的模板中方便的访问这些文件。例如,假设你有一个ImageField字段,名叫mug_shot,那么在Django模板的HTML文件中,可以使用{{object.mug_shot.url}}来获取该文件。其中的object用你具体的对象名称代替。

可以通过name和size属性,获取文件的名称和大小信息。

24、FilePathField   ---选择指定目录按限制规则选择文件,有三个参数可选, 其中”path”必需的,这三个参数可以同时使用, 参数描述:

path:必需参数,一个目录的绝对文件系统路径。 FilePathField 据此得到可选项目。 Example: “/home/images”;

match:可选参数, 一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名。 注意这个正则表达式只会应用到 base filename 而不是路径全名。 Example: “foo。*\。txt^”, 将匹配文件 foo23.txt 却不匹配 bar.txt 或 foo23.gif;

recursive:可选参数, 是否包括 path 下全部子目录,True 或 False,默认值为 False。

match 仅应用于 base filename, 而不是路径全名。 如:FilePathField(path=”/home/images”, match=”foo.*”, recursive=True)…会匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif

25、FileField   ---文件上传字段。 要求一个必须有的参数: upload_to, 一个用于保存上载文件的本地文件系统路径。 这个路径必须包含 strftime formatting, 该格式将被上载文件的 date/time 替换(so that uploaded files don’t fill up the given directory)。在一个 model 中使用 FileField 或 ImageField 需要以下步骤:在你的 settings 文件中, 定义一个完整路径给 MEDIA_ROOT 以便让 Django在此处保存上传文件。 (出于性能考虑,这些文件并不保存到数据库。) 定义 MEDIA_URL 作为该目录的公共 URL。 要确保该目录对 WEB 服务器用户帐号是可写的。在你的 model 中添加 FileField 或 ImageField, 并确保定义了 upload_to 选项,以告诉 Django 使用 MEDIA_ROOT 的哪个子目录保存上传文件。你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT)。 出于习惯你一定很想使用 Django 提供的 get_<fieldname>_url 函数。举例来说,如果你的 ImageField 叫作 mug_shot, 你就可以在模板中以 {{ object。get_mug_shot_url }} 这样的方式得到图像的绝对路径。

26、PhoneNumberField   ---一个带有合法美国风格电话号码校验的 CharField(格式:XXX-XXX-XXXX)

27、USStateField   ---美国州名缩写,由两个字母组成(天朝人民无视)。

28、XMLField   ---XML字符字段,校验值是否为合法XML的 TextField,必须提供参数:

schema_path:校验文本的 RelaxNG schema 的文件系统路径。

二、常用选项参数意义

1、null   数据库中字段是否可以为空(null=True)

2、db_column  数据库中字段的列名(db_column="test")

3、db_tablespace

4、default  数据库中字段的默认值

5、primary_key  数据库中字段是否为主键(primary_key=True)

6、db_index  数据库中字段是否可以建立索引(db_index=True)

7、unique  数据库中字段是否可以建立唯一索引(unique=True)

8、unique_for_date  数据库中字段【日期】部分是否可以建立唯一索引

9、unique_for_month  数据库中字段【月】部分是否可以建立唯一索引

10、unique_for_year  数据库中字段【年】部分是否可以建立唯一索引

11、auto_now  更新时自动更新当前时间

12、auto_now_add  创建时自动更新当前时间

13、verbose_name  Admin中显示的字段名称

14、blankAdmin  中是否允许用户输入为空表单提交时可以为空

15、editableAdmin  中是否可以编辑

16、help_textAdmin  中该字段的提示信息

17choicesAdmin  中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作

如:

sex=models.IntegerField(choices=[(0,'男'),(1,'女'),],default=1)

error_messages自定义错误信息(字典类型),从而定制想要显示的错误信息;

字典健:null,blank,invalid,invalid_choice,unique,andunique_for_date

如:{'null':"不能为空.",'invalid':'格式错误'}

18、validators 自定义错误验证(列表类型),从而定制想要的验证规则

from django.core.validators import RegexValidator
from django.core.validators import EmailValidator,URLValidator,DecimalValidator,
MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
如:
test = models.CharField(max_length=32,error_messages={'c1': '优先错信息1','c2': '优先错信息2','c3': '优先错信息3',
},
validators=[RegexValidator(regex='root_\d+', message='错误了', code='c1'),RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'),EmailValidator(message='又错误了', code='c3'), ]
)

五.迁移数据模型

1.首先在setting配置文件中注册应用

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',#注册新建的测试应用'test1',
]

2.修改数据库连接为mysql,同样是在setting配置文件中修改

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', #数据库引擎'NAME': 'TestDB', #数据库名称'USER': 'root', #数据库账号'PASSWORD': '123456', #数据库密码'HOST': '127.0.0.1', #数据库地址'POST': 3306, #数据库端口号}
}

3.添加数据库模块引用到应用目录的__init__.py文件中

添加如下代码

import pymysql
pymysql.install_as_MySQLdb()

4.在终端中执行迁移命令

#生成一个记录模型变化的文件python manage.py makemigrations mytest#将文模型的变化同步到数据库中。python manage.py migrate mytest

在终端执行效果如下:

#生成一个记录模型变化的文件
(venv) aije@bogon test1 % python manage.py makemigrations mytest
Migrations for 'mytest':mytest/migrations/0001_initial.py- Create model user_manager
#将文模型的变化同步到数据库中。
(venv) aije@bogon test1 % python manage.py migrate mytest
Operations to perform:Apply all migrations: mytest
Running migrations:Applying mytest.0001_initial... OK
(venv) aije@bogon test1 % 

查看 数据库是否生成了新的数据表

至此,Django3.0连接mysql8.0已经完成,并通过模型的方式创建了数据表。

后面将使用Django创建自己的后台管理。及前台博客页面。

七.【Python3.8+Django3.0从零开始系列】Django3.0+Python3.8连接MySql8.0及遇到的问题解决相关推荐

  1. python3连接数据库步骤_Python3连接Mysql8.0遇到的问题及处理步骤

    最近在使用Python开发系统,需连接mysql数据库,我用的是Python3连接MySQL8.0,其中老是报错以下问题: 网上给了各种各样的方法,大多是通过各种方式修改密码. 最简单的方法是更换了r ...

  2. dw8与mysql的连接,VS2019连接mysql8.0数据库的教程图文详解

    1.首先准备好vs2019以及mysql数据库,两者都可以去官网下载,我们直接描述连接过程. 2.连接: 第一步:打开mysql的安装目录,我本地的安装目录如下:(注意是否有include和lib文件 ...

  3. dw2019连接mysql数据库_VS2019连接mysql8.0数据库的教程图文详解

    1.首先准备好VS2019以及mysql数据库,两者都可以去官网下载,我们直接描述连接过程. 2.连接: 第一步:打开mysql的安装目录,我本地的安装目录如下:(注意是否有include和lib文件 ...

  4. Navicat连接MySQL8.0出现乱码的解决方案

    Navicat连接MySQL8.0出现乱码的解决方案 参考文章: (1)Navicat连接MySQL8.0出现乱码的解决方案 (2)https://www.cnblogs.com/ray-mr-hua ...

  5. mysql8.0client_navicat 连接mysql8.0 报错client does not support authentication

    navicat 连接mysql8.0 报错client does not support authentication,解决方法: 打开windows Powershell,输入以下命令 ,加红加粗的 ...

  6. JDBC连接时所犯错误1.字符集设置不合适2.连接MySQL8.0社区版时时区不一致3..包名不能以Java.命名4.驱动被弃用

    Microsoft JDBC Driver 的主页为:https://msdn.microsoft.com/en-us/data/aa937724.aspx 下载所需驱动 今天连接时报了四次错,记录下 ...

  7. FineReport——JDBC 连接 MySQL8.0 版本数据库

    1.描述 下面介绍 Windows 操作系统下 JDBC 连接 MySQL8.0 版本数据库的两种方法. 2. 方法一 1)删除%FR_HOME%\webapps\webroot\WEB-INF\li ...

  8. navicat连接mysql闪退_Navicat连接MySql8.0的各种问题及解决方法

    navicat连接mysql8.0亲测有效 今天下了个 mysql8.0,发现navicat连接不上,总是报错1251: 原因是mysql8.0版本的方式和mysql5.0的不一样,连接会报错. 试了 ...

  9. FineReport连接mysql8.0.16

    今天想用springboot2.1.5集成finereport10.0,结果连接mysql8.0.16时,提示连接失败,上官网一看,发现内置的mysq版本驱动是5.1.39,所以问题是:mysql驱动 ...

最新文章

  1. 加速 PyTorch 模型训练的 9 个技巧
  2. RSA, ACS5.X 集成配置
  3. Jmeter学习系列----1 环境搭建
  4. nginx+memcached+captcha_server实现验证码服务器
  5. 1.odoo13之跟着官网做项目/实例(创建模块、创建模型类、配置角色安全权限文件)
  6. yii 1.4 constant.php,yii 中设置提示成功信息,错误提示信息,警告信息
  7. 收文处理和发文处理的环节_公文处理,如何提速增效
  8. Windows Terminal v0.7 发布:支持分屏、重排选项卡和改进 UI
  9. sklearn中的XGBClassifier函数学习
  10. 前端开发-Weex初试
  11. 电脑tf卡检测不到_tf卡 插入电脑没盘符,但数据恢复软件能检测到异常
  12. UVA 12304 (平面几何)
  13. 网络营销推广文案如何量化工作和管理
  14. 找靓机用计算机表白,找靓机怎么样-2300元的鼠标用起来怎么样?Finalmouse Ultralight Phantom体验...
  15. 计算机视觉基础之IoU和mIoU
  16. IDEA 隐藏窗口标题栏(去掉 Win10 白色标题栏)
  17. 替代WinPcap的新型Windows网络数据包截获软件——NPcap
  18. 【Unity】3D坦克大战入门级别开发
  19. 移动端性能测试必备工具PerfDog性能狗
  20. Android 广告包使用之字节穿山甲介绍

热门文章

  1. Unity中实现批量替换字符串中的指定字符
  2. 知道mysql单元测试答案_高校邦MySQL数据库基础单元测试答案
  3. 乖离水机器人攻略_乖离性百万亚瑟王幽蓝机器人卡牌推荐 超弩幽蓝机器人攻略...
  4. excel两个表格按照某一数值匹配其他数据
  5. 关于oracle-ocp你要知道的都在这里
  6. 汉字 Unicode编码范围及 计算文本的中文英文字数
  7. 坚果G9致命缺点,一篇文章告诉你坚果G9到底好不好
  8. 我的游戏学习日志2——雪人兄弟
  9. 计算机科学与技术制药工程就业前景分析,2018制药工程专业就业前景和就业方向分析...
  10. python获取股票数据接口