day59

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)

最新文章

  1. Cocos2d Android 环境搭建
  2. iOS开发小技巧--实现毛玻璃效果的方法
  3. 22. javacript高级程序设计-高级技巧
  4. 更换内核后重编virtualbox内核模块
  5. HDU 1069&&HDU 1087 (DP 最长序列之和)
  6. win7下vs2010编译生成sqlite3.dll库
  7. RAD,V模型
  8. 附加题-stack的理解
  9. HiveContext VS SQLContext
  10. 如何使用ZBLibrary-Android快速开发框架
  11. Constructing Roads
  12. cf B. Petya and Staircases
  13. 车间任务不允许"每个装配件"超过100000
  14. iOS多线程——同步异步串行并行
  15. Java中常见数据结构Map之HashMap
  16. GDB 资料汇总
  17. Java 短信发送
  18. MYSQL使用PMM进行性能监控
  19. 好用好玩的Python包
  20. HTTP协议规定,客户端的编写

热门文章

  1. 实验吧——NSCTF web200
  2. vue+element下拉框样式的点击按钮
  3. java mail 封装工具类使用
  4. 《Android开发艺术探索》读书笔记之IntentFillter的匹配规则
  5. Ionic run android失败解决方法。
  6. 阿里云查看本服务器 公网ip地址 命令
  7. Django框架(一)-- Django简介
  8. 使用cookiecutter创建django项目
  9. echars配置案例-reactnative
  10. 爬虫-lxml用法