共计 2466 个字符,预计需要花费 7 分钟才能阅读完成。
一、配置 django 数据库
默认使用的是 sqlite 数据库
- 配置 sqlite 数据库代码为
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', | |
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), | |
} | |
} |
- 配置 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() # 进行删除 |
正文完
星哥玩云-微信公众号
