首先定义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—-模版

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

524

被折叠的 条评论
为什么被折叠?



