为了看清楚 orm与sql语句的映射关系,在settings.py中增加如下的配置信息来实现 简单的输出数据库操作日志到控制台中的功能
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level': 'DEBUG',
},
}
}
执行python manage.py shell
命令 进行终端数据库操作
首先先导入模型类from hello.models import *
orm常用操作:
- 增加--create和save方法:
# objects是model默认的管理器
# create方法,是管理器的方法
Author.objects.create(name="张三")
# save方法,是model对象的方法
author = Author()
author.name = "李四"
author.save()
# 有主外键关联的字段既可以以字段名_id的形式添加也可以按照对象的形式添加
# id的形式添加
AuthorDetail.objects.create(sex=0, email="110@aa.com", address="福建省", birthday="1993-10-09", author_id=3)
# 以对象的形式
author = Author()
author.name = "李四"
author.save()
AuthorDetail.objects.create(sex=1, email="220@aa.com", address="江苏省", birthday="2003-10-09", author=author)
# 多对多关系是一种特殊形式,他会多添加一张关系表,所以添加这种属性也是比较复杂的
# 先创建除多对多关系外的字段,再调用字段的add方法添加 也行
book = Book.objects.create(title="python", publisher_id=1, publication_date="2003-10-8")
author = Author.objects.get(id=1)
book.authors.add(author)
- 修改 -- save和update方法
# save方法,get方法也是其中model对象的方法
author = Author.objects.get(id=1)
author.name = "jack"
author.save()
# update方法,是querySet对象的方法
Publisher.objects.filter(id=1).update(city="南京", website="www.china-new.cn")
- 查询-- all
publisher = Publisher.objects.all()
print(publisher)
# 惰性机制:
# 注意这里的all方法并不会立即执行数据库查询,而只是返回了一个QuerySet的对象,当使用的时候才会调用QuerySet对象进行查询(比如print)
- 删除 -- delete
Author.objects.filter(name="李四").delete()
# delete是一种联级查询,即会先删除author 再删除authordetail中的数据,
# 还得删除 book_author表中的数据,即会删除所有有关联关联关系表中的数据