manage.py脚本使用
manage.py是每个django项目中自动生成的一个用于管理项目的脚本文件。需要通过python命令执行。manage.py接受的是Django提供的内置命令。
执行方式:python manage.py 内置命令
内置命令包含:
- makemigrations:创建更改文件(数据库)
- migrate:将生成的py文件应用到数据库(数据库)
- inspectdb:反向生成models文件
- runserver:运行服务器:默认端口为8000,默认localhost为127.0.0.1
- startapp appname:新建App
- startproject projectname :新建Django project
更多命令使用:
python manage.py 可以看到详细的列表,在忘记了名称的时候特别有用
数据库表正向生成
根据models文件自动创建数据库表
python manage.py makemigrations
python manage.py migrate
makemigrations
作用:根据检测到的模型创建新的迁移。迁移的作用,更多的是将数据库的操作,以文件的形式记录下来,方便以后检查、调用、重做等等
执行命令后:相当于在该app下建立migrations目录,并记录下所有关于models.py的改动,比如0001_initial.py。(这个改动还没有同步到数据库)
migrate
作用:使数据库状态与当前模型集和迁移集同步。就是将对数据库的更改,主要是数据表设计的更改,在数据库中真实执行。例如,新建、修改、删除数据表,新增、修改、删除某数据表内的字段等等。
执行命令后:django是根据migrations下面的脚本文件来生成数据表,models中的修改会同步到数据库
如何区分执行migrations下的哪个文件?
django有一张django_migrations表,表中记录了已经执行的脚本,那么表中没有的就是还没执行的脚本,执行migrate命令的时候就只执行表中没有记录的那些脚本。
注意:
1.注意执行过程中的报错提示信息
2.有时在执行migrate的时候如果发现没有生成相应的表,可以看看在django_migrations表中是否有脚本执行记录。可以删除django_migrations表中的记录和数据库中对应的表,然后重新执行即可。
数据库表反向生成
根据已有的数据库表自动生成models文件
python manage.py inspectdb #默认数据库
python manage.py inspectdb --database databasename #制定数据库
检查DATABASE_NAME数据库中的表并为每个表打印模型类,修改managed = True,告诉django可以对数据库进行操作
备注:python3不支持Mysqldb,但是框架在执行时默认使用的是MySQLdb,需要在app下的init文件增加下述命令
import pymysql
pymysql.install_as_MySQLdb()