共计 2466 个字符,预计需要花费 7 分钟才能阅读完成。
一、配置 django 数据库
默认使用的是 sqlite 数据库
- 配置 sqlite 数据库代码为
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', # 选择数据库引擎
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # 创建 sqlite 数据库文件位置
}
}
- 配置 mysql 数据库
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', # 选择数据库引擎
'NAME': 'lucky', # 数据库名称
'HOST': '127.0.0.1', # 主机
'USER': 'lucky', # 用户名
'PASSWORD': '123456', # 密码
'PORT': 3306, # 端口
}
}
-
安装 pymysql 扩展库
pip3 install pymysql
-
在 project 的 init.py 文件中 添加如下代码
import pymysql pymysql.install_as_MySQLdb()
python3.x 使用的是 pymysql 模块,所以需要在 project/__init.py 文件中添加如上代码
二、表分析
需求: 创建用户表
-
一个用户表所需字段
用户名 密码 性别 年龄 个人简介 头像 是否删除 创建时间
-
创建模型代码位置
App->models.py
-
模型、属性、表之间的关联
一个模型类 对应数据库中的一张表 一个类属性 对应 表中的一个字段
-
创建用户表模型
class User(models.Model):
username = models.CharField(max_length=20) # 用户名 最大长度 20
password = models.CharField(max_length=64) # 用户密码 最大长度 64
sex = models.BooleanField(default=True) # 性别 默认为 True
age = models.IntegerField(default=20) # 年龄 默认 20 岁
info = models.CharField(max_length=100,default='info') # 个人简介 最大长度 100 默认为 info
icon = models.CharField(max_length=60,default='default.jpg') # 头像 最大长度为 60 默认为 default.jpg
isDelete = models.BooleanField(default=False) # 是否删除 默认不删除
createTime = models.DateTimeField(auto_now_add=True) # 创建时间 默认为添加数据的时间
def str(self): # 打印时友好的输出展示
return self.username
class Meta:
db_table = 'user' # 当前表名 (如果不写 默认为应用名称 + 模型名称)
三、生成数据表
-
修改 DJango 原码 (注意 2.2 版本需要此操作)
-
sudo vim /usr/local/lib/python3.7/dist-packages/django/db/backends/mysql/base.py
version = Database.version_info if version < (1, 3, 13): raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
更改为:
version = Database.version_info # if version < (1, 3, 13): # raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
-
sudo vim /usr/local/lib/python3.7/dist-packages/django/db/backends/mysql/operations.py
query = getattr(cursor, '_executed', None) if query is not None: query = query.decode(errors='replace') return query
更改为:
query = getattr(cursor, '_executed', None) if query is not None: query = query.encode(errors='replace') return query
-
-
生成迁移文件
python manage.py makemigrations
在’应用目录 /migrations’下生成迁移文件 此刻还没有同步到数据库
- 执行迁移
python manage.py migrate
使用迁移文件在数据库中生成对应的数据表 此刻数据库中已经存在我们的用户表
四、测试数据库
-
进入到 python shell 进行测试
python manage.py shell
-
倒包
>>> from App.models import User
- 添加数据
>>> u = User() # 实例化 User 模型类
>>> u.username = 'lucky' # 添加用户名
>>> u.password = 123456 # 添加密码
>>> u.sex = True # 添加性别
>>> u.age = 18 # 添加年龄
>>> u.info = 'lucky 是一个帅气的 boy' # 添加个人简介
>>> u.save() # 进行保存
- 查询数据
>>> u = User.objects.get(pk=1) # 查询主键为 1 的用户对象
>>> u
>>> u.username
- 修改
>>> u = User.objects.get(pk=1) # 查询主键为 1 的用户对象
>>> u.username = '帅气的 lucky' # 修改用户名为帅气的 lucky
>>> u.save() # 进行保存
- 删除
>>> u = User.objects.get(pk=1) # 查询主键为 1 的用户对象
>>> u.delete() # 进行删除
正文完
星哥说事-微信公众号