数据库配置
连接数据库
Django 默认支持sqlite,mysql,oracle,postgresql数据库
- Django默认使用sqlite数据库,自带sqlite数据库驱动,引擎名称:django.db.backends.sqlite3
- mysql数据库引擎名称:django.db.backends.mysql
mysql驱动程序
一般python2用MySQLdb,python3用PyMySQL
- MySQLdb(mysql python)
- mysqlclient
- MySQL
- PyMySQL(纯python的mysql驱动程序)
Django的setting中配置数据库(默认配置)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Django的setting中配置数据库(MySQL配置)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名称',
'USER': '数据库用户名',
'PASSWORD': '数据库密码',
'HOST': '主机地址',
'POST': '端口号',
}
}
Django的setting中配置应用信息
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'你的应用名称',
]
创建数据库表
用法
- models.py 内的class 属性,可以创建预设表信息,当执行预设表信息后数据才正式添加至数据库
- 使用 【python + Django + 数据库类型】不兼容版本或models错误 可能存在No changes detected 的情况
models类型 | 代指 |
---|---|
models类 | 代指数据库中表 |
models字段 | 代指数据库中的字段(列) |
models对象 | 代指数据库中的一行记录 |
models.py中创建和配置数据库表信息
class Text_Tab(models.Model): # 创建名称为 Text_Tab 的表
user = models.CharField(max_length=18,) # 创建名称为 user 的数据表字段,数据类型是字符串,数据最大长度为18字符
==注意,没有设置主键的情况下字段不能使用id,系统会自动生成一个自增名称为id的字段==
数据类型表
类型 | 释义 |
---|---|
AutoField() | int自增列,必须填入参数primary_key=True |
BigAutoField() | bigint自增列,必须填入参数 primary_key=True |
CharField() | 字符串 |
IntegerField() | 整数 |
PositiveIntegerField() | 正整数 |
FloatField() | 浮点数 |
SmallIntegerField() | 小数 |
BinaryField() | 二进制数字 |
DecimalField() | 十进制小数 |
PositiveSmallIntegerField() | 正小数 |
BigIntegerField() | 长整型,范围【-9223372036854775808 ~ 9223372036854775807】 |
BooleanField() | 布尔值 |
NullBooleanField() | 可以为空的布尔值 |
TextField() | 文本类型 |
SlugField() | 字符串类型,Django Admin和ModelForm提供 字母、数字、下划线、连接符 格式验证 |
CommaSeparatedIntegerField() | 字符串类型,格式必须为都好分割的数字 |
EmailField() | 字符串类型,Django Admin和ModelForm提供 email 格式验证 |
IPAddressField() | 字符串类型,Django Admin和ModelForm提供 IPv4 格式验证 |
GenericIPAddressField() | 字符串类型,Django Admin和ModelForm提供 IPv4和IPv6 格式验证 |
URLField() | 字符串类型,Django Admin和ModelForm提供 URL 格式验证 |
UUIDField() | 字符串类型,Django Admin和ModelForm提供 UUID 格式验证 |
FilePathField() | 字符串类型,Django Admin和ModelForm提供 目录下文件读取 |
FileField() | 字符串类型,Django Admin和ModelForm提供 路径保存在数据库,文件上传到指定目录 |
ImageField() | 字符串类型,Django Admin和ModelForm提供 路径保存在数据库,图片上传到指定目录 |
DateField() | 日期:YYYY-MM-DD |
TimeField() | 时间:HH:MM[:ss[.uuuuuu]] |
DateTimeField() | 长日期:YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] |
ForeignKey(“表2”) | 一对多表 |
ToManyField(“表2”) | 多对多表 |
常用数据参数表
更多数据类型和数据类型参数可参考博文《Django基础-数据类型和参数表》
CharField(Field)
参数 | 释义 |
---|---|
max_length=None | 最大长度 |
min_length=None | 最小长度 |
strip=True | 去除首尾空字符 |
empty_value=” | 空值 |
IntegerField(Field)
参数 | 释义 |
---|---|
max_value=None | 最大值 |
min_value=None | 最小值 |
DecimalField(IntegerField)
参数 | 释义 |
---|---|
max_value=None | 最大值 |
min_value=None | 最小值 |
max_digits=None | 最大位数 |
decimal_places=None | 小数点后位数 |
mysqlclient安装
下载安装mysqlclient
pip install mysqlclient
==如果提示 Did you install mysqlclient? 可以使用pymysql替代==
下载pymysql
pip install pymysql
在项目_init_.py中添加以下信息(因为系统默认引擎为Mysqldb,现在替换为pymysql)
import pymysql
pymysql.install_as_MySQLdb()
生成数据库表
创建预设表信息(数据库变更文件)
python manage.py makemigrations 应用名
# 执行完成后 项目 migrations 会生成数据库变更文件
执行预设表信息(按照数据库变更文件创建,自动生成系统默认表)
python manage.py migrate
==注:生成数据库表仅适用于新的数据库,在数据库有文件或已经有其它应用项目生成过的情况下可能会无法生成数据库文件,常见终端提示信息为:“No migrations to apply.”==
sql语法查看
在全局setting.py设置中添加logging信息可显示为sql查询语句
LOGGING={
'version':1,
'disable_existing_loggers':False,
'handlers':{
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers':{
'django.bd.backends':{
'handlers':['console'],
'propagate':True,
'level':'DEBUG',
},
}
}