1.配置
Flask安装过 MySqldb,虽然有orm对象关系映射,但是有了sql语句,是安装
数据库驱动包—执行orm的sql语句, Flask-MySqldb
django : pip install PyMySQL
但是django原生是使用MySqldb的,所以需要转换
from pymysql import install_as_MySQLdb
install_as_MySQLdb()
在工程init.py中
配置信息settings:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 数据库主机
'PORT': 3306, # 数据库端口
'USER': 'root', # 数据库用户名
'PASSWORD': 'mysql', # 数据库用户密码
'NAME': 'django_demo' # 数据库名字
}
}
2.定义模型类
具体的字段和约束
小点:在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理
CASCADE 级联,删除主表数据时连通一起删除外键表中数据
(默认)PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
迁移:
生成迁移文件
python manage.py makemigrations
同步到数据库中
python manage.py migrate
3.工具的使用
3-1.shell
一种交互,像ipython,但是有些配置是读取当前工程的,如果使用python来测试,还需要我们配置
python manage.py shell
3-2.mysql执行的日志,动态
动态的把执行过的sql语句显示出来
配置:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
把68,69行前面的#去除,69行的数字改成 1 ,然后保存并重启mysql服务
sudo service mysql restart
tail -f /var/log/mysql/mysql.log # 可以实时查看数据库的日志内容
适用于linux
4.数据库操作
4-1.增加
(1)对象.save() 像 flask的commit
(2)通过模型类 .objects.create()保存
HeroInfo.objects.create( hname='沙悟净' )
4-2.查询 类.objects 通过模型类 返回的是查询对象 ( 类Flask的 News.query)
(1) 简单查询 BookInfo.objects.all()
get 查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。
all 查询多个结果。
count 查询结果数量。
(2) 过滤查询 过滤条件的表达语法:属性名称__比较运算符=值 (btitle__contains='传') 因为它的语法表达格式:相等和不相等不是简单的==符号
filter 过滤出多个结果
exclude 排除掉符合条件剩下的结果
get 过滤单一结果
(2-1) 相等 : exact
BookInfo.objects.filter(id__exact=1)
(2-2) 包含 : contains
BookInfo.objects.filter(btitle__contains='传')
(2-3) 开头,结尾 startswith、endswith
BookInfo.objects.filter(btitle__endswith='部')
(2-4) 空 : isnull
BookInfo.objects.filter(btitle__isnull=False)
(2-5) 在~里 : in
BookInfo.objects.filter(id__in=[1, 3, 5])
(2-6) 比较 : gt 大于, gte 大于等于, lt 小于, lte 小于等于
BookInfo.objects.filter(id__gt=3)
(2-7) 不等于 : exclude
BookInfo.objects.exclude(id=3)
(2-8) 日期查询: year、month、day、week_day、hour、minute、second
BookInfo.objects.filter(bpub_date__year=1980)