django中数据库mysql的增删改查操作
首先,你要将模型建好,添加你想要的字段。并在数据库中完成建表。这里可以参考我的博客[Django创建项目的基本流程 虚拟环境的创建 setting中的相关匹配置 媒体静态文件的配置以及数据库与模型的配置]:
建模型(表)
class Student(models.Model):
s_name = models.CharField(max_length=20)
s_tel = models.CharField(max_length=11)
class Meta:
db_table='day5_student'
模型中字段的类型参数如下:
1、models.AutoField
自增列(int),如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField
字符串字段,必须 max_length 参数
3、models.BooleanField
布尔类型=tinyint(1),不能为空,Blank=True
4、models.ComaSeparatedIntegerField
用逗号分割的数字=varchar,继承CharField,所以必须 max_lenght 参数
5、models.DateField
日期类型 date,对于参数,auto_now =True则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField
日期类型 datetime,同DateField的参数
7、models.Decimal
十进制小数类型= decimal,必须指定整数位max_digits和小数位decimal_places
8、models.EmailField
字符串类型(正则表达式邮箱)=varchar,对字符串进行正则表达式
9、models.FloatField
浮点类型= double
10、models.IntegerField 整形
11、models.BigIntegerField
长整形: integer_field_ranges ={
‘SmallIntegerField’:(-32768,32767),
‘IntegerField’:(-2147483648,2147483647),
‘BigIntegerField’:(-9223372036854775808,9223372036854775807),
‘PositiveSmallIntegerField’:(0,32767),
‘PositiveIntegerField’:(0,2147483647),
}
12、models.IPAddressField
字符串类型(ip4正则表达式)
13、models.GenericIPAddressField
字符串类型(ip4和ip6是可选的),参数protocol可以是:both、ipv4、ipv6,验证时,会根据设置报错
14、models.NullBooleanField 允许为空的布尔类型
15、models.PositiveIntegerFiel 正Integer
16、models.PositiveSmallIntegerField 正smallInteger
17、models.SlugField 减号、下划线、字母、数字
18、models.SmallIntegerField
数字,数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField 字符串=longtext
20、models.TimeField 时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField 字符串,地址正则表达式
22、models.BinaryField 二进制
23、models.ImageField 图片
24、models.FilePathField 文件
注意:在这之前些操作前,要将模型导入,
创建数据
Student.objects.create(s_name='yangmv',s_tel='123456')
或者
obj = Student(s_name='yangmv',s_tel='123456')
obj.save()
或者
dic = {'s_name':'yangmv','s_tel':'123456'}
Student.objects.create(**dic)
s_name,s_tel是我们前面模型中定义过的字段。
获取所有数据
Student.objects.all()
获取部分数据
Student.objects.get(s_name='小明')
Student.objects.get(s_name__startswith="ven") #s_name是否以Ven开头
查询数据
Student.objects.filter(s_name='小明')
__gt 大于
Student.objects.filter(id__gt=1) # 获取id大于1的值
__lt 小于
Student.objects.filter(id__gt=10) #获取id小于10的值
Student.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
__in 范围 在。。。里
Student.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
Student.objects.exclude(id__in=[11, 22, 33]) # not in
__range
Student.objects.filter(id__range=[1, 2]) # 范围 id为1到2
__contains 内容为什么
Student.objects.filter(s_name__contains="ven") #获取s_name为ven
Student.objects.filter(s_name__icontains="ven") # icontains大小写不敏感
Student.objects.exclude(s_name__icontains="ven")
排序
Student.objects.filter(s_name='seven').order_by('id') #正序
Student.objects.filter(s_name='seven').order_by('-id') #倒序
修改并保存
Student.objects.filter(s_name='yangmv').update(s_tel='520')
或者
obj = Student.objects.get(s_name='yangmv')
obj.s_tel = '520'
obj.save()
这里如果我们有对有对数据库字段的值的引用,就要用到F和Q,假设我们要对s_tel的值进行加减乘除运算或者与或非运算。
F和Q
F()允许Django在未实际链接数据的情况下具有对数据库字段的值的引用。通常情况下我们在更新数据时需要先从数据库里将原数据取出后方在内存里,然后编辑某些属性,最后提交。
order = Student.objects.get(s_tel='123456789')
Student.s_tel = F('amount') - 1
order.save()
因为我们修改的时候一般是将某些字段直接赋值,或者直接匹配,不会对数据进行操作。而假如模型里有分数这一字段,我们要匹配学生分数加上10,小于九十分,这时就要用到F了,或者要将所有学生的分数减掉10,也要用到F,这就是F的作用。
Q()可以组合使用 &(and),|(or),~(not)操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。
Student.objects.get( Q(s_tel='123456789') |(s_tel='123456788')) #匹配s_tel字段内容为123456789或者123456788 的 学生
Q的作用也就是与或非的作用。
删除
Student.objects.filter(s_name='小明').delete()