python后台实现数据库_Python后台开发Django(数据库)

添加pyMysqL,由于Django内部连接MysqL时使用的是MysqLdb模块,而python3中还无此模块,所以需要使用pyMysqL来代替,在工程同名的目录里__init__.py下添加

importpyMysqL

pyMysqL.install_as_MysqLdb()

表的基本操作

创建表

在对应APP的models.py中,如果创建多表则在此文件中添加类即可

#表名为dongapp2_tbuser#属性为字段名,默认会创建主键为自增ID列修改id列的字段名:iddong=models.AutoField(primary_key=True)

classTbuser(models.Model):

userx=models.CharField(max_length=32) 类型为:varchar(32)

passwd=models.CharField(max_length=64)可以添加实参【null=True】,表示值可以为空

age=models.IntegerField() 类型为:integer

在settings.py的INSTALLED_APPS=[  ]注册,添加APP的名字

dongapp2',

命令行进入APP目录,执行下面两条命令:

python ../manage.py makemigrations

python ../manage.py migrate

在修改或者删除字段时都需要进行两条命令的执行,models.py中的数据库映射时时刻刻绑定着原数据,执行两条命令后会进行数据表结构同步

字段数据类型补充

所设置的字段类型大部分是不会在编写增删改查时进行自动验证,而是有益于Django自带的admin管理后台应用

xx=models.EmailField(null=True)邮箱格式,Django自带用户管理页使用

xx=models.URLField(null=True)URL格式

xx=models.GenericIPAddressField(null=True)IP4或者IP6格式

xx=models.BooleanField()bool类型

xx=models.FloatField()浮动数

xx=models.DateField()类似于data =>YYYY-MM-DD

xx=models.DateTimeField()类似于datatime =>YYYY-MM-DD HH:mm:ss

xx=models.TimeField() 时间

字段实参:

null             #是否可为空,默认不可为空,如【unll=True】可为空

default          #默认值

primary_key     #主键

db_column      #数据库中数据表的字段名

db_index        #是否建立索引

auto_now_add   #创建当前行时自动添加为当前时间,【xx=models.DateTimeField(auto_now_add=True)】

auto_now       #更新当前行时自动更新为当前时间,仅支持下面的更新数据方法二

外键

在建立表字段时添加,外键字段在数据库中为:forekx_id

forekx=models.ForeignKey("另一个表的类名",to_field=另一个表类的字段名,默认为id字段默认值")

在数据获取中进行跨表取数据

resx = models.Tbuser.objects.filter(id=3).first()

resx.forekx.另一个表类的任意字段名resx.forekx为另外表的一行数据对象

添加/修改外键字段的值

dongxiao").first()

数据增删改查

数据的操作一般会在 view(业务处理)中进行

添加数据

1 from dongapp2 models2 3 models.Tbuser.objects.create(userx=dong21234562)4 5 datax=models.Tbuser(userx="dong3",passwd="1234563",age=20)

6 datax.save()

查询数据

Filter条件补充:Id字段大于等于0:【id__gt=0】

1 2

3 4 # resx=models.Tbuser.objects.all()#查询所有,查询结果为[对象,对象]

5 resx = models.Tbuser.objects.filter(userx="dong1",age=10) # 条件查询,and

6 countx = len(resx) # 得到查询的总行数

7 for rowx in resx: # 循环输出值,控制台接收(开启服务的地方)

8 print(rowx.id,rowx.userx,rowx.age)

9 resx=models.Tbuser.objects.all().values("id","name")#查询所有并获取指定字段数据,查询结果[字典,字典]

10

11 查询第一个,返回非列表

12 resx = models.Tbuser.objects.filter(id=3).first()

13 if resx:

14 print(resx.age)

15

16 返回查找的总行数

17 resx = models.Tbuser.objects.filter(passwd=").count()

删除数据

models

resx= models.Tbuser.objects.filter(id=1).delete()

更新数据

).first()

resxobj.age=100resxobj.save()

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值