Python网络编程06----django数据库的增删改查

本文详细介绍了使用Django进行Python网络编程时的数据库操作,包括增加数据(单条、多条及全量删除)、更新数据(单条、多条更新)以及查询操作(一对一、一对多、多对多关系查询)。文中提供了具体的代码示例和注意事项,确保数据库操作的正确执行。

首先定义model如下.

class UserInfo(models.Model):
    username=models.CharField(max_length=50,null=True,primary_key=False,db_index=True) #可以为空,不是主键,创建索引
    password=models.CharField(max_length=50,error_messages={"invalid":"出错"})         #定义出错信息
    gender=models.BooleanField(default=False)
    typeId=models.ForeignKey("UserType")
    createdate=models.DateTimeField(auto_now=True)                                       #自动赋值当前时间

class userType(models.Model):
    TYPE_CHOICE=(                                     #不走数据库,直接在内存里那表
        (u"1",u"普通用户"),
        (u"2",u"高级用户"),
        (u"3",u"管理员")
    )
    type=models.CharField(max_length=2,choices=TYPE_CHOICE)

然后再views.py中定义增删改查的函数,并在urls.py中设置好访问路由。

增加数据

添加数据有两种方式。

def add(request,name):
    User.objects.create(name=name)                        #向数据库中添加name
    return HttpResponse("<h1>{0}<h1/>".format(name))
def add(request,name):
    obj=User(name=name)
    obj.save()
    return HttpResponse("<h1>{0}<h1/>".format(name))

删除数据

删除单条数据

def delete(request,id):
    User.objects.get(id=id).delete()        #删除一条指定id的数据,如果同时存在多条会报错
    return HttpResponse("<h1>已经删除{0}<h1/>".format(id))

删除多条数据

def delete(request,gender):
    User.objects.filter(gender=True).delete()                     #删除所有指定性别的数据
    return HttpResponse("<h1>删除成功<h1/>")

删除所有数据

def delete(request,id):
    User.objects.all().delete()             #删除所有数据
    return HttpResponse("<h1>已经删除<h1/>")

更新数据

更新单条数据

def update(request,id,name):
    obj=User.objects.get(id=id)       #如果获取不到或者获取多条会报错
    obj.name=name
    obj.save()
    return HttpResponse("<h1>{0},{1}<h1/>".format(name, id))

更新多条数据

def update(request,id,name):
    User.objects.filter(id=id).update(name=name) #更新所有指定id的数据
    return HttpResponse("<h1>{0},{1}<h1/>".format(name, id))

查询


def searchAll(request):
    obj=User.objects.all()
    sql=obj.query                           #可以获取对应的sql语句
    data=obj.values()                       #返回包含所有词条的list

    onlyone=User.objects.get(name="wer")   #查询单条数据,如果多条或者没有就会报错
    many=User.objects.filter(name="wer")[0:2]      #查询多条数据,并输出开头两条
    like=User.objects.filter(name__contains="w")   #模糊查询包含1的数据
    gtage=User.objects.filter(age__gt=7)           #查询年龄大于7的数据
    orderName=User.objects.filter(name="wer").order_by("id")     #对查询结果id字段进行排序


    return HttpResponse("<p>{0}<p/><p>{1}<p/><p>{2}<p/>".format(sql, data,orderName.values()))

一对多的查询

假设数据库表为

class UserType(models.Model):
    name=models.CharField(max_length=50)

class UserInfo(models.Model):
    username=models.CharField(max_length=50)
    password=models.CharField(max_length=50)
    email=models.EmailField()
    userType=models.ForeignKey("UserType")

查找usertpye大于5的用户名

models.UserInfo.objects.filter(userType__id__gt=5).values("username")

多对多的查询

假设数据库表为。

# Create your models here.
class UserGroup(models.Model):
    groupName=models.CharField(max_length=50)
    user=models.ManyToManyField("UserInfo")

class UserInfo(models.Model):
    username=models.CharField(max_length=50)
    password=models.CharField(max_length=50)
    email=models.EmailField()

由于多对多之间会出现第三章关系表,因此对关系表操作可以用下面方法。

添加一条关系

方式一

    u1 = models.UserInfo.objects.get(id=1)
    g1=models.UserGroup.objects.get(id=1)

    g1.user.add(u1)                        #向usergroup_userinfo添加对应用户和群组的id号

方式二

    u1 = models.UserInfo.objects.get(id=1)
    g1=models.UserGroup.objects.get(id=1)

    u1.usergroup_set.add(g1)

删除一条关系

方式一

    u1 = models.UserInfo.objects.get(id=1)
    g1=models.UserGroup.objects.get(id=1)

    g1.user.remove(u1)                       

方式二

    u1 = models.UserInfo.objects.get(id=1)
    g1=models.UserGroup.objects.get(id=1)

    u1.usergroup_set.remove(g1)

获取数据

方式一

    u1 = models.UserInfo.objects.get(id=1)
    g1=models.UserGroup.objects.get(id=1)

    print(g1.user.all().filter(id=1))

方式二

    u1 = models.UserInfo.objects.get(id=1)
    g1=models.UserGroup.objects.get(id=1)

    u1.usergroup_set.all().filter(caption="CEO")

注意

在数据库操作完成之后,不要忘记更新数据库。控制台命令如下

    python manage.py makemigrations appname
    python manage.py migrate

本文地址:http://blog.csdn.net/a359680405/article/details/51361562
上一篇:Python网络编程05—-django与数据库的交互
下一篇:Python网络编程07—-模版

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值