django

2018-10-21  本文已影响0人  喀布尔街角

django

同步表结构

所有操作需要在项目manage.py同目录下运行

建表

$ python manage.py makemigrations appname
$ python manage.py migrate appname

修改表

# 若appname下有migrations文件夹,并存在历史版本文件,这直接运行
$ python manage.py makemigrations appname
$ python manage.py migrate
  1. 将models修改为于数据库结构相同(注释修改部分就行);
  2. 运行 makemigrations,在appname/migrations文件夹下生成原始结构文件;
  3. 增加修改部分,再次运行makemigrations指令,生成第二个结构文件,
  4. 执行migrate指令,即可同步表结构,若操作失败可以尝试删除第一个文件并,修改第二个文件对第一个文件的依赖
from __future__ import unicode_literals
from django.db import models, migrations
import django.utils.timezone
class Migration(migrations.Migration):
    dependencies = [
        ('dzh', '0001_initial'),  # 删除此行,不依赖其他文件
    ]
    operations = [
        migrations.CreateModel(
            name='SaasLesseeIP',
            fields=[
                ('uid', models.CharField(primary_key=True, max_length=16, serialize=False)),
                ('ip', models.CharField(max_length=15, default='')),
                ('create_date', models.DateTimeField(default=django.utils.timezone.now)),
            ],
        ),
    ]

数据库操作

table_obj = TableClass.objects.create([**columns_dict])

table_obj = TableClass.objects.filter(**param_dict).first()
table_obj.delete()

table_obj = TableClass.objects.filter(**param_dict).first()
table_obj.column1 = value1
table_obj.column2 = value2
table_obj.save()

table_obj = TableClass.objects.get(**params_dict)

: get查询不存在时报错(TableClass matching query does not exist),且get只适用于查询结果有且只有一条记录的情况(不一定根据id查询,只要查询是一条记录就正常,否则报错)

def get(self, *args, **kwargs):
        """
        Perform the query and return a single object matching the given
        keyword arguments.
        """
        clone = self.filter(*args, **kwargs)
        if self.query.can_filter() and not self.query.distinct_fields:
            clone = clone.order_by()
        num = len(clone)
        if num == 1:  # 有且只有一条记录时,返回记录
            return clone._result_cache[0]
        if not num:  # 未查询到记录,抛出异常 DoesNotExist
            raise self.model.DoesNotExist(
                "%s matching query does not exist." %
                self.model._meta.object_name
            )
        # 超过一条记录,抛出异常 MultipleObjectsReturned
        raise self.model.MultipleObjectsReturned(
            "get() returned more than one %s -- it returned %s!" %
            (self.model._meta.object_name, num)
        )
# 随意查啦
table_obj = TableClass.objects.filter(**params_dict).first()
table_obj_list = TableClass.objects.filter(**params_dict).all()
# 根据指定column排序查询'-' 倒序
table_obj_list = TableClass.objects.filter(**params_dict).order_by('-column').all()
# 分页 start_index:其实下标,0开始,   查询结果包括start_index数据,不包括end_index数据
table_obj_list = TableClass.objects.filter(**params_dict)[start_index:end_index]
obj_list = TableClass.objects.filter(**params_dict).order_by('-update_datetime')
paginator = Paginator(obj_list, page_size)  # page_size 每页记录条数
try:
    obj_list_part = paginator.page(page_num)  # page_num 页码,从1开始
except PageNotAnInteger:
    obj_list_part = paginator.page(1)
except EmptyPage:
    obj_list_part = paginator.page(paginator.num_pages)  # paginator.numpages 获取最后一页
TableClass.objects.filter(Q(column__contains=keyword)).all()
result = TableClass.objects.filter(column__range=(start_datetime, end_datetime)).all()  ## 包含头尾
result = TableClass.objects.filter(column__lte=value).all()  # 小于等于
result = TableClass.objects.filter(column__gte=value).all()  # 大于等于
result = TableClass.objects.filter(Q(column1__gte=value) | Q(column2__lt=value)).all()
result = TableClass.objects.filter(column__in=[]).all()
上一篇 下一篇

猜你喜欢

热点阅读