Django项目app --> 项目中又分了一级Python包,不同的功能放到不同的包里面
1. 创建app


python manage.py startapp app01
2. 告诉Django创建了一个app


INSTALLED_APPS = [
'app01.apps.App01Config', # 告诉Django我自己新建了一个名叫app01的应用
# 'app01'
]
ORM是Django用来操作数据库的一种框架。
其中ORM与数据库的对应关系是:
ORM | DB |
类 | 数据表 |
属性 | 字段 |
对象 | 数据行 |
Django中ORM的使用
1. 用处
1. 操作数据表
2. 操作数据行
2. 使用
1. 手动创建一个数据库


create database mysite;
2. 告诉Django连哪个数据库


DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 连接数据库的类型
'NAME': 'mysite', # 数据库名
'HOST': '127.0.0.1', # 数据库主机地址
'PORT': 3306, # 数据库的端口
'USER': 'root',
'PASSWORD': '',
}
}
3. 用什么连数据库?
利用第三方的包,比如第三方包:pymysql和MySQLdb
告诉Django用pymysql模块代替默认的MySQLdb去连接MySQL数据库
和settings.py同级的__init__.py文件,写上:


import pymysql
pymysql.install_as_MySQLdb()
4. 在app/models.py的文件中创建类
类必须继承models.Model


class Press(models.Model):
id = models.AutoField(primary_key=True) # id主键
name = models.CharField(max_length=32) # 出版社名称
def __str__(self):
return '<这是一个出版社对象,它的名字是:{}>'.format(self.name)
# 书
class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增id主键
title = models.CharField(max_length=30) # 书名
price = models.IntegerField() # 价格
# Django 1.11 默认就是级联删除, Django 2.0之后必须指定on_delete
# to=关联的表名
press = models.ForeignKey('Press', on_delete=models.CASCADE)
# 作者
class Author(models.Model):
id = models.AutoField(primary_key=True) # 自增id主键
name = models.CharField(max_length=32) # 作者名字
books = models.ManyToManyField(to='Book') # 只是ORM层面建立的一个多对多关系,不是作者表的一个字段
def __str__(self):
return self.name
5. 执行命令


1. python manage.py makemigrations --> 找个小本本把models.py的变更记录一下
2. python manage.py migrate --> 把上面的变更记录翻译成SQL语句,去数据库执行
6. ORM操作


from app01.models import User, Press, Book, Author


Press.objects.all() # 查询所有出版社对象 ——》 对象列表 queryset
Press.objects.filter(条件) # 查询所有满足条件的出版社对象 ——》 对象列表 queryset
Press.objects.get(条件) # 查询有且只能有一个对象 没有或者多个都报错 ——》 对象
属性:
press_obj.id
press_obj.name
外键:
book_obj.id
book_obj.title
book_obj.press ——》 关联的对象
book_obj.press_id ——》 数据库中的关联对象的ID
book_obj.press.id
多对多:
author_obj.books ——》 管理对象
author_obj.books.all() ——》作者关联的所有书籍对象


new_obj = Press.objects.create(name='新的出版社')
Book.objects.create(title='书名',price=15,press=press_obj)
Book.objects.create(title='书名',price=15,press_id=press_obj.id)
new_obj= Author.objects.create(name='作者名')
new_obj.books.set([1,2,3])
new_obj.books.set([book1,book2])
new_obj.books.add(1,2,3)


press_obj.name = '新的出版社名字'
press_obj.save()
book_obj.press = press_obj
# book_obj.press_id = press_obj.id
book_obj.save()
author_obj.name = '作者名'
author_obj.save()
author_obj.books.set([1,2,3])


book_obj.delete() —— 》 删除单个对象
Press.objects.filter(条件).delete() ——》 删多个对象
7.其中有个用Pycharm连接数据库的技巧,其实也只需要配置好就可以使用了的。
最好时区这里填上,有时候会发生时区错误。
来源:oschina
链接:https://my.oschina.net/u/4380404/blog/4094535