目录
一、Django连接数据库
由于Django自带的SQLite3功能较少,主要用于项目中的小型测试,在实际项目中都会替换成MySQL
1.使用MySQL数据库首先安装驱动程序
pip install PyMySQL
- Django默认的数据库配置需要我们更新
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
2.Django配置MySQL
第一步:修改DATABASES配置信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day51',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'root123',
'CHARSET': 'utf8'
}
第二步:
-
django1.X版本需要在项目目录下或者app目录下的
__init__.py
编写代码让pymysql以MySQLDB的运行模式和Django的ORM对接运行,让Django的ORM能以mysqldb的方式来调用PyMySQL。
import pymysql
pymysql.install_as_MySQLdb()
- django2.X及以上都可以直接通过下载mysqlclient模块解决
终端中执行
pip install mysqlclient
3.查看执行的SQL语句的配置
如果想在创建表的时候查看执行的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',
},
}
}
二、ORM简介
1.ORM:对象关系映射
ORM的作用简单来说是Django中自带的,能够让不会SQL语句的python程序员,使用python面向对象的语法来操作数据库的一种方式
Pyhton | 映射数据库中 |
---|---|
类 | 表 |
对象 | 记录 |
对象点属性 | 数据获取字段对应的值 |
ORM缺点:
ORM由于高度封装了SQL语句,所以运行效率较低
- 我们可以通过以下步骤来使用django的数据库操作:
- 配置数据库连接信息
- 在models.py中定义模型类
- 生成数据库迁移文件并执行迁文件[注意:数据迁移是一个独立的功能,这个功能在其他web框架未必和ORM一块的]
- 通过模型类对象提供的方法或属性完成数据表的增删改查操作
2.ORM基本操作
1.先在models.py中编写模型类
# ORM object relationship mapping 模型类
class BoysInfo(models.Model):
# id int primary key auto_increment
id = models.AutoField(primary_key=True) # 字段名=字段类型 + 约束条件
# name varchar(32)
name = models.CharField(max_length=32)
# age int
age = models.IntegerField()
2.执行数据库迁移相关命令
- 在终端中,将操作记录在migrations目录下,之后就可以操作了
python3 manage.py makemigrations
- 将数据库迁移到数据库中
python3 manage.py migrate
每次执行相关数据库的操作,都需要执行这两条命令同步数据库
3.ORM基本语句
使用ORM需要在views.py
文件中导入models
from app01 import models
-
创建表
models.类名.objects.create()
-
创建表
models.类名.objects.filter()
-
创建表
models.类名.objects.update()
-
创建表
models.类名.objects.delete()
报错信息记录
1.name '_mysql' is not defined
- 解决方案:在
__init__.py
中添加
import pymysql
pymysql.install_as_MySQLdb()
'str' object has no attribute 'decode'
- 解决方案:点进去链接,将decode改成encode