django model 开发


表名

  • 获取表名
UserData._meta.db_table
  • 自定义表名
class UserData(models.Model):
    ...
    class Meta:
        db_table = "user_data"

查询条件

  • filter() : 选择条件
  • exclude() : 排除条件
__exact 		:精确等于 like 'aaa'
__iexact 		:精确等于 忽略大小写 ilike 'aaa'
__contains 		:包含 like '%aaa%'
__icontains		: 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 			:大于
__gte 			:大于等于
__lt 			:小于
__lte 			:小于等于
__in 			:存在于一个list范围内
__startswith 	:以...开头
__istartswith 	:以...开头 忽略大小写
__endswith 		:以...结尾
__iendswith 	:以...结尾,忽略大小写
__range 		:在...范围内
__year 			:日期字段的年份
__month 		:日期字段的月份
__day 			:日期字段的日
__isnull		:=True/False

group by

python:

UserData.objects
.filter(hubid=sensorid,time__range=(time2,time1))
.values('hour')
.annotate(sum_out=Sum('outdoor'), sum_in=Sum('indoor'), sum_eat=Sum('kitchen'), sum_wash=Sum('toilet'))
.order_by('hour')

sql:

select Sum('outdoor') as sum_out
		,Sum('indoor') as sum_in
		,Sum('kitchen') as sum_eat
		,Sum('toilet') as sum_wash
		,hour
from user_data 
where hubid='sensorid' and (time between time1 and time2)
group by hour
order by hour asc

Q

or,and 查询

ref: http://codingdict.com/sources/py/django.db.models/3914.html

migrate

将工程 migrations/ 下的文件删除之后, 再次做 makemigrations & migrate 的时候可能有问题:e.g. django.db.utils.OperationalError: table "app_info" already exists, 或者根本没有任何动作

  • 打开db, 查 django_migrations 表
    12|auth|0008_alter_user_username_max_length|2020-01-22 08:52:36.648872
    13|sessions|0001_initial|2020-01-22 08:52:36.658063
    14|dashboard|0001_initial|2020-01-22 08:59:28.387304
    15|dashboard|0002_auto_20200130_1807|2020-01-30 10:13:54.872818
    16|dashboard|0003_appvisitinfodaily|2020-02-04 13:04:15.575447
    
    这些记录与migrations 一一对应,已经记录了的就不会再做
  • 看一个 0001_initial py 文件
    class Migration(migrations.Migration):
        initial = True
        dependencies = [
        ]
        operations = [
            migrations.CreateModel(
                name='AppInfo',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('app_name', models.CharField(max_length=64)),
                ],
                options={
                    'db_table': 'app_info',
                },
            ),
    
    就是一些migrations 文件的依赖关系,DDL 的操作

机制清楚了, 那就是把 db里的记录, 和文件内容对应上就行了, 如 删除一些 db 里的记录,这样对应的 migration py 就可以做重,也可以配合修改migration py 使达到目的

注意: django migrate 并不是原子操作, 可能出现: 表创建完成,但索引没有建立,django_migrations 中没有migration文件记录的异常情况。

shell

可以用 python manager.py shell 创建 一个django 的终端。在里面可以

from django.db import connection 

cursor = connection.cursor() 
cursor.execute('select * from .....') 

ref:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值