在django项目创建完成并能够成功运行之后。就可以开始搭建系统了。
(默认装好了mysql和pymysql和mysqlclient)我前面的博客有详细的步骤。
1.在settings.py文件中添加创建的app名称
左边目录栏为我的项目和app文件。在INSTALLED_APPS =中添加app名称‘tea1’
2.将settings.py文件中的database改为下图所示自己的mysql数据库信息。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'tsql', # 数据库名称
'USER': 'root', # 名字
'PASSWORD': '19990124', # 密码
'HOST': 'localhost', # 可以不写,默认的
}
}
3.在settings.py同级目录下的_init_.py中写入下列代码。
import pymysql
# 打开数据库连接
pymysql.install_as_MySQLdb()
# 前面两行是重要的,后面这些是测试用的,这里打印出mysql的版本,显示在程序运行界面上
db = pymysql.connect('localhost', 'root', '19990124', 'tsql')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")
# cursor.execute('SELECT VERSION()')
# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()
print("Database version : %s " % data)
db.close()
按道理说这时候就再运行manage.py的时候应该能够成功运行了。但!!这里有个坑就是可能会出现如下错误:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
出现这种情况是因为python3.7+django2.2+pymysql在运行时django2.2内部有版本限制。
具体解决办法为:
(1)进入python3.7的目录(python的安装目录),找到base.py文件
这是我的目录:Macintosh HD ▸ 应用程序 ▸ anaconda3 ▸ python ▸ lib ▸ python3.7 ▸ site-packages ▸ django ▸ db ▸ backends ▸ mysql->base.py
(2)用编辑器打开,这里我用的sublime(图方便)
把36/37行的这两句话注释掉。
# if version < (1, 3, 13):
# raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
(3)保存文件更改后退出。
4.这时候返回终端再次运行python manage.py runserver,就可以成功运行了。
界面如下:
5.数据迁移
在终端输入命令:python manage.py makemigrations
python manage.py imgrate
数据迁移完成。
关于migrate 和makemigrations 的原理和区别,照搬别人的总结
原文链接:https://blog.csdn.net/weixin_43582101/article/details/87927618
1、makemigrations 和 migrate 工作原理分别是什么:
makemigrations:根据检测到的模型创建新的迁移。迁移的作用,更多的是将数据库的操作,以文件的形式记录下来,方便以后检查、调用、重做等等。
migrate:使数据库状态与当前模型集和迁移集同步。说白了,就是将对数据库的更改,主要是数据表设计的更改,在数据库中真实执行。例如,新建、修改、删除数据表,新增、修改、删除某数据表内的字段等等。
2、如果不想使用 Django 的 makemigrations 和 migrate 功能,但是不小心执行了这两个命令会发生什么,
首先在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py,
接着执行migrate的话,这时候会作用到数据库文件,产生对应的表
总的来说,如果你想在已有的系统中的数据库里新增新的表,可以直接在navicat里操作,不用重新执行makemigrations和migrate的命令。因为这两个命令是针对model文件的修改来操作数据库的。