Django 数据库表生成与修改

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()

 

参考:

https://www.cnblogs.com/yushengzhou/p/9609499.html

https://www.jianshu.com/p/8d3e76197496

 

你可能感兴趣的:(Django)