美文网首页程序员
Django1.11.1+之关于数据库表操作的正确步骤

Django1.11.1+之关于数据库表操作的正确步骤

作者: 煮茶忘放糖 | 来源:发表于2017-07-17 09:09 被阅读116次
壁纸.jpg

大家好!是的,我又发“伪”教程了,本来这篇文章原名为《Django 数据库表操作总结:基于Django1.11.1》,但是我改了,因为Django把该做的都做了,我们根本不用考虑和数据库本身打什么交道,我之前更新网站时(对,就是那个很丑的主题 ),考虑过将某些字段删除,并将某些字段属性修改,为此我查询了很多教程,他们的教程应该是太老了,导致我按照步骤一步一步操作,最后得到的结果全是报错!

真是一步一个坑的教训,直到近日和好友“太阳是我焐热的”讨论这个问题,自己重新做了一遍操作,准备复现当时的报错给他时,结果我发现只要在Django项目中的models.py中修改一处,同步一次,就不会出现任何问题,并且完美的解决我们的需求,所以,我们需要的只是一个正确的操作步骤。

先考虑自己的需求,我需要在一个已经部署好运行了很久的服务器上删除所有数据的同一个字段,并且修改某个表中某个字段的属性,最后新增加一个ManyToManyField字段。

看完需求,我们看如何具体地实现它,

我的代码段(截取片段):

# 文章表
class Post(models.Model):
    title = models.CharField(max_length=70, verbose_name=u'标题')
    excerpt = models.CharField(max_length=100, verbose_name=u'摘要')
    imgurl = models.CharField(max_length=200, verbose_name=u'封面图')
    body = models.TextField(verbose_name=u'内容')
    category = models.ForeignKey(Category, verbose_name=u'所属分类')
    plate = models.ForeignKey(Plate, verbose_name=u'所属板块')
    love_num = models.IntegerField(default=0, verbose_name=u'喜爱次数')
    browse_num = models.IntegerField(default=0, verbose_name=u'浏览次数')
    created_time = models.DateTimeField(verbose_name=u'创建时间')
    modified_time = models.DateTimeField(verbose_name=u'最后修改时间')

现在我想要删除plate这个字段,按照网上的教程,我们需要去数据库将该字段删除,然后删除表,但其实不用这么麻烦,只需要将下面这一行代码移除即可,

plate = models.ForeignKey(Plate, verbose_name=u'所属板块')

然后在终端中进入manage.py同级目录输入同步命令:

python manage.py makemigrations
python manage.py migrate

进行到这一步,我还要修改某个表中某个字段的属性:

class Links(models.Model):
    title = models.CharField(max_length=30, verbose_name=u'网站名称')
    url = models.CharField(max_length=20, verbose_name=u'网站主页')
    created_time = models.DateTimeField(verbose_name=u'创建时间')

    class Meta:
        verbose_name = '友情链接'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title

由于我最开始设计表的时候没考虑到有些网站主页字段多的情况,导致后面我加友情链接时出现字符大小限制,所以我需要修改这个字段,传统的办法:

先在models.py文件中修改字段属性,不要同步,然后进入Mysql的命令行,直接修改字段属性:

alter table 表名 modify 列名 属性;

比如我之前的:

url = models.CharField(max_length=20, verbose_name=u'网站主页')

我要改成

 url = models.CharField(max_length=70, verbose_name=u'网站主页')

命令就是:

alter table monitor_links modify turl varchar(70);

其实根本不用那么麻烦,只需要直接修改字段属性,同步即可。

最后一个要求:新增加一个ManyToManyField字段。

做法是:先增加一个Class,和之前建立表的操作无差别,然后必须同步数据库,让它把表建立起来:

# 多对多
class Tags(models.Model):
    name = models.CharField(max_length=100)

再在文章表里增加该字段:

# 文章表
class Post(models.Model):
    title = models.CharField(max_length=70, verbose_name=u'标题')
    excerpt = models.CharField(max_length=100, verbose_name=u'摘要')
    imgurl = models.CharField(max_length=200, verbose_name=u'封面图')
    body = models.TextField(verbose_name=u'内容')
    category = models.ForeignKey(Category, verbose_name=u'所属分类')
    # plate = models.ForeignKey(Plate, verbose_name=u'所属板块')
    love_num = models.IntegerField(default=0, verbose_name=u'喜爱次数')
    browse_num = models.IntegerField(default=0, verbose_name=u'浏览次数')
    created_time = models.DateTimeField(verbose_name=u'创建时间')
    modified_time = models.DateTimeField(verbose_name=u'最后修改时间')
    # 新增加字段
    tags = models.ManyToManyField(Tags, null=True, blank=True, default='')

最后同步完成!这些关于数据库的操作应该都是你需要的,下次再见了。

相关文章

  • Django1.11.1+之关于数据库表操作的正确步骤

    大家好!是的,我又发“伪”教程了,本来这篇文章原名为《Django 数据库表操作总结:基于Django1.11.1...

  • 数据库第一周

    mysql的命令和查询语句: 登陆系统 数据库的操作 如何创建表 关于表的操作: DML:数据库操作语言:对于表中...

  • 自定义JBDCUtils工具类

    使用java进行数据库操作时, 读表前后的步骤繁杂, 在读表前要进行注册驱动, 获得Connection对象等步骤...

  • mysql基本操作命令汇总--笔记

    一、基本操作 对数据库以及表的一些基本操作 1-1.关于数据库 1-2.关于数据表 1-3表的约束 1-4索引 作...

  • mysql,库管理与表管理1

    关于数据库的操作 (以下操作均在MySQL中进行) 表管理 单表查询 有条件的查询:

  • XamarinSQLite教程添加索引

    XamarinSQLite教程添加索引 索引可以提升数据库表的查询速度。下面为已存在的表添加索引,操作步骤如下: ...

  • 数据库、表、字段操作速览

    6.1 数据库操作 创建数据库 查看数据库 选中数据库 查看数据库中的表 删除数据库 6.2 数据表操作 创建表 ...

  • 数据库操作注意事项

    (1)备份数据库下有多个用户,每个用户都会创建一些表,在对表进行操作步骤:首先找到该表的所有者 最后对表进行操作,...

  • MyBatis入门实验(三)之增删查改

    实验内容 使用Mybatis执行对数据库表的增删查改操作 操作步骤 一、安装 添加Maven依赖(本文使用版本为3...

  • mysql支持emoji插入

    通过工具navicat操作。 步骤一、先修改数据库的字符集步骤二、对应表的字符集修改步骤三、对应字段的字符集修改参...

网友评论

    本文标题:Django1.11.1+之关于数据库表操作的正确步骤

    本文链接:https://www.haomeiwen.com/subject/fegzcxtx.html