在项目中,进入虚拟环境:
1、首先安装mysql数据库驱动 pymysql
pip install pymysql
2、在django的项目配置文件夹中找到__init__.py初始化文件
增加这两行配置
import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb() # 使用pymysql代替mysqldb连接数据库
3、在django的项目配置文件夹中找到settings.py文件,修改配置
找到DATABASE 这个配置,修改如下:
# 数据库配置,Django使用sqlite3作为默认数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 配置数据库引擎
'NAME': 'blog', # 指定连接数据库的名称
'USER':'root', # 数据库的用户名
'PASSWORD':'123456', # 数据库的密码
'HOST':'localhost', # 连接的主机名
'PORT':'3306' # 端口号
}
}
4、设置 ORM数据模型类 与 mySQL数据库中表的映射
在你创建的应用文件夹下找到models.py文件,这个文件是用来创建数据模型:
from django.db import models
# Create your models here.
#创建模型
class blog(models.Model): #继承模型Model类
user_name = models.CharField(max_length=30,default='加油')
user_password = models.CharField(max_length=30)
上边代码非常直白。每个模型被表示为 django.db.models.Model
类的子类(上边子类模型为blog模型)。每个模型有一些类变量,它们都表示模型里的一个数据库字段。
每个字段都是 Field
类的实例 - 比如,字符字段被表示为 CharField
,日期时间字段被表示为 DateTimeField
。这将告诉 Django 每个字段要处理的数据类型。
每个 Field
类实例变量的名字(例如 use_rname
或 user_password )也是字段名,所以最好使用对机器友好的格式。你将会在 Python 代码里使用它们,而数据库会将它们作为列名
定义某些 Field
类实例需要参数。例如 CharField
需要一个 max_length
参数。这个参数的用处不止于用来定义数据库结构,也用于验证数据 。
5、数据模型映射到数据库
在Django中,数据模型和数据库之间的操作成为迁移。现在数据模型有了,需要映射到指定的数据库中了,并实现创建指定的数据表。
创建迁移命令:
python manage.py makemigrations
官方文档:
通过运行
makemigrations
命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移。迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式 - 没那么玄乎,它们其实也只是一些你磁盘上的文件。
这里有几个坑,在这说下,输入完命令回车,有可能会报红:
报错:
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
大体意思是 mysqlclient 版本太低了造成的,解决方案:
找到 MySQL包的安装目录中,因为我是通过虚拟环境安装的,所以只需要知道虚拟环境的安装目录即可找到Mysql的安装目录,查看虚拟环境安装目录,然后在mysql文件下找到 base.py文件,打开把下边两行代码注释即可:
if version < (1, 3, 3):
raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
pipenv --venv
然后,当你再次输入 python manage.py makemigrations 迁移命令时,有可能还是会报错:
··· ···
File "C:\Users\Administrator\.virtualenvs\dj_first_project-oJ5d6nGd\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_query
query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'
这个报错有2种解决方案:
第一种:看到上边报错的地址(还是你的mysql的安装目录),顺着这个文件目录进去,把146行中的decode改为encode即可。
第二种:还是在这个文件中,找到 下边这个函数,把下边if两行代码注释即可。
def last_executed_query(self, cursor, sql, params):
# With MySQLdb, cursor objects have an (undocumented) "_executed"
# attribute where the exact query sent to the database is saved.
# See MySQLdb/cursors.py in the source distribution.
query = getattr(cursor, '_executed', None)
# if query is not None:
#query = query.decode(errors='replace')
return query
现在在运行:python manage.py makemigrations 创建模型成功!
6、在项目应用中 migrations ⽂件夹下 会自动生成 0001_initial.py文件
7、创建好数据迁移这个动作之后呢,还需要执行一下数据迁移
在数据库里创建新定义的模型的数据表:
执行迁移命令
python manage.py migrate
官方文档:
迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表 - 它专注于使数据库平滑升级而不会丢失数据。我们会在后面的教程中更加深入的学习这部分内容,现在,你只需要记住,改变模型需要这三步:
- 编辑
models.py
文件,改变模型。- 运行
python manage.py makemigrations
为模型的改变生成迁移文件- 记录models.py的变更。- 运行
python manage.py migrate
来应用数据库迁移- 将变更翻译成SQL语句,去数据库执行。数据库迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。
补充:
1、在django中使用ORM创建的表,在没有设置数据库表名的时候,表名默认会使用:当前模型类名称 _ 当前应用名称,所以如果你已经创建好了一个表,就不能再修改模型类的名字了,如果修改,下次数据迁移时,会报错!!!
8、在Navicate中会看到数据表已经创建
除了djapp_blog ,其它的表是Django自动给你创建的。
官方文档:
就像之前说的,为了方便大多数项目,我们默认激活了一些应用,但并不是每个人都需要它们。如果你不需要某个或某些应用,你可以在运行
migrate
前毫无顾虑地从sttings.py 里边的 INSTALLED_APPS
里注释或者删除掉它们。 migrate
命令只会为在 INSTALLED_APPS
里声明了的应用进行数据库迁移。