Django添加数据库字段

想在模型essay中添加字段view_count,并给予初始值0

方法

先在models.py中修改模型

添加

 view_count=models.IntegerField(verbose_name='浏览次数',default=0)

然后,我们运行命令manage.py sqlall core来查看,以下是其中一段:

CREATE TABLE "core_essay" (
    "id" integer NOT NULL PRIMARY KEY,
    "eType_id" integer NOT NULL REFERENCES "core_eassaytype" ("id"),
    "title" varchar(25) NOT NULL,
    "content" text NOT NULL,
    "abstract" text NOT NULL,
    "pub_date" datetime NOT NULL,
    "view_count" integer NOT NULL
)
;

执行如下语句

>>> from django.db import connection

>>> cursor = connection.cursor()

>>>cursor.execute('ALTER TABLE core_essay ADD COLUMN view_count integer DEFAULT 0') 

<django.db.backends.sqlite3.base.SQLiteCursorWrapper object at 0x020C31C0>



### Django 查询数据库字段计数是否有默认索引 在 Django 中,当定义模型字段,并不会为普通字段自动创建索引。只有当字段被定义为主键(`primary_key=True`)、唯一字段(`unique=True`)或外键数据库才会自动生成相应的索引[^1]。例如,在 `Restaurant` 模型中,`place` 字段被定义为一对一关系并设置为主键,这会导致数据库为该字段创建一个唯一索引。 对于字段计数操作(如 `COUNT(*)`),如果没有索引支持,数据库引擎通常需要执行全扫描来统计符合条件的记录数量,这在数据量较大会导致性能下降。然而,如果目标字段上存在适当的索引,数据库可以利用索引来加速计数操作,从而显著提高查询效率[^2]。 以下是一个示例,展示如何在 Django 中手动为字段添加索引以优化计数查询: ```python from django.db import models class Place(models.Model): name = models.CharField(max_length=100, db_index=True) # 手动为 name 字段添加索引 class Restaurant(models.Model): place = models.OneToOneField( Place, on_delete=models.CASCADE, primary_key=True, ) serves_hot_dogs = models.BooleanField(default=False) serves_pizza = models.BooleanField(default=False) # 在视图中进行计数查询 def count_places(request): count = Place.objects.filter(name__startswith='A').count() return JsonResponse({'count': count}) ``` 在上述代码中,`name` 字段通过 `db_index=True` 明确设置了索引。这样可以确保在执行类似 `COUNT(*)` 的查询数据库能够利用索引快速定位相关记录,而无需扫描整个。 #### 注意事项 尽管索引能够提升查询性能,但过多的索引会增加存储空间需求,并对插入、更新和删除操作带来额外开销。这是因为每次修改数据,都需要同步更新相关索引。因此,在设计模型应权衡索引带来的利弊,合理选择需要索引的字段[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值