day68
内容回顾(赵导专场)
1. ORM已经的学过的内容:
1. Django项目如何使用ORM连接MySQL
1. 手动创建数据库
2. 在settings.py里面配置一下数据库的连接信息(告诉Django连接哪一个数据库)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 连接数据库的类型
'NAME': 'day62xiawu', # 数据库名字
'HOST': '127.0.0.1', # IP
'PORT': 3306, # 端口
'USER': 'root', # 用户名
'PASSWORD': '123456', # 密码
}
}
3. 在和settings.py同目录下的__init__.py文件中,告诉Django用pymysql代替MySQLdb来连接数据库
import pymysql
pymysql.install_as_MySQLdb()
4. 在app/models.py中,定义类,类一定要继承models.Model
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
5. 执行两条命令
1. 在哪儿执行?
在项目的根目录(有manage.py文件的那个目录)
2. 命令
python manage.py makemigrations --> 将models.py文件中的改动记录在小本本(app/migrations/00xx_****.py)上
python manage.py migrate --> 将改动翻译成SQL语句,去数据库中执行
2. 表和表之间的关系
这是Django内置的models模块 在models.py中
1. 一对多(出版社和书)
publisher = models.ForeignKey(to="Publisher")
在数据库中:
有没有publisher这个字段?
数据库中实际 生成的是一个 publisher_id 字段
2. 多对多(作者和书)
books = models.ManyToManyField(to="Book")
在数据库中:
是通过第三张表建立的关系
3. 增删改查操作
这是自己写类的models模块 from app01 import models
1. 单表增删改查
增:
models.Publisher.objects.create(name="沙河出版社")
查:
models.Publisher.objects.get(id=1)
models.Publisher.objects.get(name="沙河出版社")
删:
models.Publisher.objects.get(id=1).delete()
改:
obj = models.Publisher.objects.get(id=1)
obj.name = "沙河第二出版社"
obj.save()
2. 外键的增删改查
增、删、查同上
book_obj = models.Book.objects.get(id=1)
book_obj.publisher 是什么? *****
和我这本书关联的出版社对象
book_obj.publisher.id 和我这本书关联的出版社的id值
book_obj.publisher.name 和我这本书关联的出版社的名称
book_obj.publisher_id 是什么?
和我这本书关联的出版社的id值
3. 多对多操作
1. 查id为1的作者都写过的书?
author_obj = models.Author.objects.get(id=1)
author_obj.books.all() --> 和我这个作者关联的所有书对象
2. 想给作者绑定多本书?
author_obj = models.Author.objects.get(id=1)
author_obj.books.set([1,2,3]) --> 把id是1、2、3的书和我这个作者关联上
正则复习
1 import re 2 3 r = re.compile(r'^delete/([a-zA-Z]+)/(d+)/$') 4 5 ret = r.match("delete/author/10/") 6 7 print(ret) # <_sre.SRE_Match object; span=(0, 17), match='delete/author/10/'> 8 9 print(ret.groups()) # groups 10 11 print(ret.group(1)) # group
执行结果:
<_sre.SRE_Match object; span=(0, 17), match='delete/author/10/'> ('author', '10') author Process finished with exit code 0
反射复习
1 # ''' 2 # 反射 3 # ''' 4 # 5 import sys 6 7 class Person(object): 8 def __init__(self, name): 9 self.name = name 10 11 def eat(self, food): 12 print("{} 在吃 {}".format(self.name, food)) 13 14 def dream(self): 15 print("{} 在做白日梦!".format(self.name)) 16 17 18 s = "person" 19 20 21 # 打印当前可用的变量 22 print(locals()["s"]) 23 print(locals().get("s")) 24 print("="*10) 25 # 字符串首字母大写 26 s = s.capitalize() 27 print(s, type(s)) 28 29 # 反射 30 if hasattr(sys.modules[__name__], s): 31 print("找到了") 32 the_class = getattr(sys.modules[__name__], s) 33 print(the_class) 34 obj = the_class("包子") 35 obj.eat("馅")
执行结果:
person person ========== Person <class 'str'> 找到了 <class '__main__.Person'> 包子 在吃 馅 Process finished with exit code 0
时间间隔
1 """ 2 时间间隔 3 """ 4 5 import datetime 6 7 8 now = datetime.datetime.now() # 你领了一张有效期为7天的优惠券 9 print(now) 10 # 时间间隔 11 d7 = datetime.timedelta(days=7) 12 # 求失效时间 13 ret = now + d7 14 print(ret)
执行结果:
2019-02-27 14:57:33.425870
2019-03-06 14:57:33.425870
Process finished with exit code 0
复习反向解析(day68orm)
点击页面的index后