django - 数据库增删改查相关操作

增删改查基本指令

#1.增
Model.objects.create(**kwargs)

obj = Model()
obj.filed = XXX
obj.save()
 
#2.查
Model.objects.all()
 
#3.改
m = Model.objects.get(id=1)
m.name = 'new_name'
m.save()
 
#4.删
m = Model.objects.get(id=1)
m.delete()

增删改查实操

#进入脚本环境
(hulishuju_env) E:\website\server\hulishuju>python manage.py shell
 
#导入模型
>>> from homepage.models import member
 
####增
#分布插入
>>> m = member(gender = 'MALE', name_id = 'hahala', password='jiuming', phone='13245664356')
>>> m.save()
#一步插入
>>> p = member.objects.create(gender = 'MALE', name_id = 'sunwukong', password='jiuming', phone='1324566435')
 
####查  
#all()全部查询 get()单一查询 filter()满足 和 exclude() 排除
>>> all_entries = member.objects.all().filter(id=1) #包括id=1的 所有条目信息
>>> all_entries = member.objects.all().exclude(id=1) #排除id=1的 所有条目信息
>>> all_entries = member.objects.all().exclude(id=1).filter(id=3) # 混合用法
 
#filter需满足的条件  exclude不满足的条件  
>>> q1 = Entry.objects.filter(headline__startswith="What")
>>> q2 = q1.filter(pub_date__lte=datetime.date.today())
>>> q3 = q2.exclude(body_text__icontains="food")
>>> print(q3)
 
#返回的是一个queryset结果集  无法直接使用 若仅需取出一条数据 使用Get
>>> resourlt1 = user_base_info.objects.get(id=1)
>>> print(resourlt1.website_addr)
 
#若需要使用结果集
>>> for e in resourlt1:
...     print(e.website_addr)
 
#多条件查询 id 大于4 小于1
>>> result = member.objects.filter(id__gt=4).exclude(id__lt=1)
 
 
#限制条目查询
>>> result = member.objects.all()[5:10]
>>> result = member.objects.all()[:10]
>>> result = member.objects.all()[5:]
 
#确认条目数
>>> result = len(member.objects.all())
 
#排序
>>> print(member.objects.all().order_by('name_id')) 升序
>>> print(member.objects.all().order_by('-name_id')) 降序
 
####改
>>> m = member.objects.get(id=2)
>>> m.website_addr = '18664368576'
>>> m.save()
 
####删
>>> m = member.objects.get(id=1)
>>> m.delete()

shell 中外键关联访问  一对多  foreignkey

#模型中字段如下
#主表名 UserProfile  在应用 user下
#子表名 datatime_log  在应用  treatment_record 下

#子表中外键字段
userid = models.ForeignKey('user.UserProfile',on_delete=models.CASCADE,verbose_name=u'用户id');

#导入数据表
>>> from treatment_record.models import datatime_log
>>> from user.models import UserProfile

##### 反向操作 即一对多 主表到子表
# 从主表中拿到对象  get(id=1) get(username='w******7') 都可以
uid = UserProfile.objects.get(id=1)

# 主表中都有一个 子表_set 的对象可以调用
# 也可以在子表外键字段自定义属性  related_name='entries' 访问 uid.entries.all()即可
# userid = models.ForeignKey('user.UserProfile',on_delete=models.CASCADE,related_name='entries',verbose_name=u'用户id');
uid.datatime_log_set.all()

##### 正向操作 即多到一 子表到主表
# 得到子表对象 
# userinfo = datatime_log.objects.get(id=8)
# 以外键字段访问主表  得到对象后进行先关操作
# userinfo.userid


密码字段函数

#引入模块
from django.contrib.auth.hashers import make_password, check_password

#制作一个密码
password = make_password(password,salt=None, hasher='default');

#验证密码
check_password("需要验证的密码","makepassword生成的编码");

动态修改查询条件

#动态查询语句
kwargs = {
	"userid" : uid,
}

#增加字典字段
if request.GET['year']:
	kwargs["datetime__year"] = request.GET['year']
if request.GET['month']:
	kwargs["datetime__month"] = request.GET['month']

#放入查询
 datatime_log.objects.filter(**kwargs)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值