Hello,大家好,我是你们的老朋友景天,上一张我们了解到Django中ORM的基本定义和怎么驱动默认的数据库sqlite3,今天我们来聊一聊怎么驱动连接mysql数据库,以及ORM中的字段详解
Django配置连接mysql
在settings.py文件中配置。
配置DATABASES参数,现在是默认的是sqlite3数据库
连接mysql配置:
先在10.10.0.52上创建个数据库,创建utf8mb4格式的,包含生僻字
配置如下:
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘orm01’,
‘HOST’: ‘10.10.0.52’,
‘PORT’: 3306,
‘USER’: ‘root’,
‘PASSWORD’: ‘Jinghao31357@’
}
}
先把原来连接sqlite的注销了,再配置连接mysql的
键都是大写
现在执行 python manager.py makemigrations,重新生成migrations文件报错
其实我们已经安装了pymysql,但是Django默认使用的还是MysqlDb
如果想用pymysql,需要告诉Django
在项目同名的目录下的__init__.py中指定
import pymysql
#使用pymysql代替mysqldb
pymysql.install_as_MySQLdb()
此时执行,依然报版本过低,
在项目中__init__.py中这个报错原因,python 3.5以上版本不支持这种方式
解决办法一:
import pymysql
pymysql.version_info=(1,4,3,“final”,0) #这里指定报错需要的pymysql版本
#使用pymysql代替mysqldb
pymysql.install_as_MySQLdb()
解决办法二:
MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,需要修改如下:
D:\softs\python3\Lib\site-packages\django\db\backends\mysql\base.py
把这个判断注释掉就可以了
再次执行migrations,没有变化的原因是因为我们创建的模型类之前通过sqlie已经执行过,migrations文件已经存在
如果想把表创建到新的mysql数据库,只需要migrate就可以
只要换了新的数据库,migrate会重新执行migrations文件
将mysql客户端添加到pycharm
同样的,下载mysql驱动
输入ip端口号,账号密码,数据库,测试连接
查看数据库表结构
也可以Navicat来可视化操作mysql数据库
模型类,通过ORM语句翻译成创建表的语句,连接数据库执行。调的是代码级别的连接数据库方式,用的是pymysql
找数据库生成表
Book模型类生成的表名称为 应用名称_模型类名小写
ORM模型类的字段
查看orm的field对应MySQL的什么字段类型在下面看
在python自带系统原码文件
D:\softs\python3\Lib\site-packages\django\db\backends\mysql\base.py
backends告诉我们Django能连接哪些数据库
ORM字段与数据库实际字段的对应关系:
"AutoField": "integer AUTO_INCREMENT", "BigAutoField": "bigint AUTO_INCREMENT", "BinaryField": "longblob", "BooleanField": "bool", "CharField": "varchar(%(max_length)s)", "DateField": "date", "DateTimeField": "datetime(6)", "DecimalField": "numeric(%(max_digits)s, %(decimal_places)s)", "DurationField": "bigint", "FileField": "varchar(%(max_length)s)", "FilePathField": "varchar(%(max_length)s)", "FloatField": "double precision", "IntegerField": "integer", "BigIntegerField": "bigint", "IPAddressField": "char(15)", "GenericIPAddressField": "char(39)", "JSONField": "json", "OneToOneField": "integer", "PositiveBigIntegerField": "bigint UNSIGNED", "PositiveIntegerField": "integer UNSIGNED", "PositiveSmallIntegerField": "smallint UNSIGNED", "SlugField": "varchar(%(max_length)s)", "SmallAutoField": "smallint AUTO_INCREMENT", "SmallIntegerField": "smallint", "TextField": "longtext", "TimeField": "time(6)", "UUIDField": "char(32)",
ORM的牛逼之处在于,数据库迁移方便
比如刚开始公司用mysql数据库,后来公司壮大了,换成了oracle数据库,
使用ORM来迁移数据库,只需要修改数据库连接即可将之前的数据库数据全部导入新的oracle数据库