python 第五十九章 orm单表操作
发布时间:2020-12-20 10:22:21 所属栏目:Python 来源:网络整理
导读:orm单表操作 对象关系映射(object relational mapping) orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执行 orm介绍 django 连接mysql1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql','NAM
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,)
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)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
