如果使用pymysql,则可以在view中直接import pymysql进行操作,与原操作无区别
Django数据库框架支持 sqlite3,MySQL,PostgreSQL等数据库,只需要在settings.py中配置即可,与数据库相关的代码一般写在models.py中
配置MYSQL
ORM操作:默认使用文件自带的db.sqlite3数据库,如果需要使用mysql数据库则需要进行以下配置
在setting.py中替换数据库配置
DATABASES = { 'default': { ENGINE': django.db.backends.mysql,NAME':dbnameUSERrootPASSWORDxxxHOST''PORTimport pymysql pymysql.install_as_MySQLdb()
表的基本操作
创建表
在对应APP的models.py中,如果创建多表则在此文件中添加类即可
#表名为dongapp2_tbuser #属性为字段名,默认会创建主键为自增ID列修改id列的字段名:iddong=models.AutoField(primary_key=True) class Tbuser(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为另外表的一行数据对象
添加/修改外键字段的值
方法一 forekx_id=11 方法二 forekx=models.XxxxXC.objects.filter(ldong=dongxiao").first()
数据增删改查
数据的操作一般会在 view(业务处理)中进行
添加数据
1 from dongapp2 models 2 方法一 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()
更新数据
方法一 resx = models.Tbuser.objects.filter(id=3).update(age=30方法二 resxobj = models.Tbuser.objects.filter(id=3).first() resxobj.age=100 resxobj.save()