orm单表操作 对象关系映射(object relational mapping) orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执行 orm介绍 django 连接mysql1 settings配置文件中 DATABASES = { 'default': { 'EN
orm单表操作 对象关系映射(object relational mapping)
orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执行
orm介绍
django 连接mysql 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'orm02', 'USER':'root', 'PASSWORD':'666', 'HOST':'127.0.0.1', 'PORT':3306, } } 2 项目文件夹下的init文件中写上下面内容,用pymysql替换mysqldb import pymysql pymysql.install_as_MySQLdb() 3 models文件中创建一个类 # class UserInfo(models.Model): # id = models.AutoField(primary_key=True) # name = models.CharField(max_length=10) # bday = models.DateField() # checked = models.BooleanField() 4 执行数据库同步指令,添加字段的时候别忘了,该字段不能为空,所有要么给默认值,要么设置它允许为空 null=True # python manage.py makemigrations # python manage.py migrate 5 创建记录(实例一个对象,调用save方法) def query(request): # 创建一条记录,增 new_obj = models.UserInfo( id=2, name='子文', bday='2019-09-27', checked=1, ) new_obj.save() #翻译成sql语句,然后调用pymysql,发送给服务端 insert into app01_userinfo values(2,'子文','2019-09-27',1) return HttpResponse('xxx')
增:
方式1: new_obj = models.UserInfo( id=2, name='子文', bday='2019-09-27', checked=1, ) new_obj.save() 方式2: # ret 是创建的新的记录的model对象(重点) ret = models.UserInfo.objects.create( name='卫贺', bday='2019-08-07', checked=0 ) print(ret) #UserInfo object 卫贺 print(ret.name) #UserInfo object print(ret.bday) #UserInfo object
时间问题
models.UserInfo.objects.create( name='杨泽涛2', bday=current_date, # now=current_date, 直接插入时间没有时区问题 checked=0 ) 但是如果让这个字段自动来插入时间,就会有时区的问题,auto_now_add创建记录时自动添加当前创建记录时的时间,存在时区问题 now = models.DateTimeField(auto_now_add=True,null=True) 解决方法: settings配置文件中将USE_TZ的值改为False # USE_TZ = True USE_TZ = False # 告诉mysql存储时间时按照当地时间来寸,不要用utc时间 使用pycharm的数据库客户端的时候,时区问题要注意
删
简单查询:filter() -- 结果是queryset类型的数据里面是一个个的model对象,类似于列表 models.UserInfo.objects.filter(id=7).delete() #queryset对象调用 models.UserInfo.objects.filter(id=7)[0].delete() #model对象调用
改
方式1:update # models.UserInfo.objects.filter(id=2).update( # name='篮子文', # checked = 0, # # ) # 错误示例,model对象不能调用update方法 # models.UserInfo.objects.filter(id=2)[0].update( # name='加篮子+2', # # checked = 0, # ) 方式2 ret = models.UserInfo.objects.filter(id=2)[0] ret.name = '加篮子+2' ret.checked = 1 ret.save() 更新时的auto_now参数 # 更新记录时,自动更新时间,创建新纪录时也会帮你自动添加创建时的时间,但是在更新时只有使用save方法的方式2的形式更新才能自动更新时间,有缺陷,放弃 now2 = models.DateTimeField(auto_now=True,null=True)