1 如何创建项目数据库
首先,在虚拟机数据库中建立一个与项目同名的数据库,方便管理。
(django_test) bd@DF:~$ mysql -u admin -p
输入密码,进入数据库后。
mysql> SHOW DATABASES;
查看当前所有已有的数据库,然后创建数据库。
mysql> CREATE DATABASE 'django_test';
就会有一个名为‘django_test’的数据库。
+--------------------+
| Database |
+--------------------+
| information_schema |
| django_test |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.10 sec)
2 进行数据库与django的交互
有了数据库之后,我们需要把这个库配置到项目中,进行关系绑定。
首先在settings.py文件中的DATABASES一项:
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'django_test', # 哪一个数据库
'USER': 'admin', # 用户
'PASSWORD': 'yourpassword', # 数据库密码
'HOST': '127.0.0.1', # 数据库服务器IP
'PORT': '3306' # 数据库端口(需要去ubuntu中设置端口转发,虚拟机的端口是3306,我们直接转发到本地3306)
}
}
将默认的配置注释掉,然后带上自己的数据库信息.端口转发(ubuntu):
由于需要操作mysql数据库,所以需要在虚拟环境中安装pymysql,注意:需要一定要在对应的虚拟环境中安装。
pip install mysql -i https://pypi.douban.com/simple
使用豆瓣源会快一些。然后pip list 查看自己是否已经有pymysql。有了之后,进入项目总目录下的__init__.py文件。
import pymysql
pymysql.install_as_MySQLdb()
添加两行代码,完成映射的导入。然后去我们需要进行数据库交互的app中的models.py.
from django.db import models
# Create your models here.
class User(models.Model):
# id = models.AutoField(primary_key=True) # 主键字段不需要我们自己写
name = models.CharField(max_length=30)
age = models.IntegerField(null=True)
sex = models.IntegerField(null=True)
city = models.CharField(max_length=30, null=True)
note = models.TextField(null=True)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
这里我们定义了很多项,然后对应的数据类型是需要注意的(根据你定义的项的数据类型来),括号里面的限定信息也需要注意。数据类型:
类型 | 说明 |
---|---|
AutoField | 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性 |
BooleanField | 布尔字段,值为True或False |
NullBooleanField | 支持Null、True、False三种值 |
CharField | 字符串,参数max_length表示最大字符个数 |
TextField | 大文本字段,一般超过4000个字符时使用 |
IntegerField | 整数 |
DecimalField | 十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数 |
FloatField | 浮点数 |
DateField | 日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误 |
TimeField | 时间,参数同DateField |
DateTimeField | 日期时间,参数同DateField |
FileField | 上传文件字段 |
ImageField | 继承于FileField,对上传的内容进行校验,确保是有效的图片 |
限定条件:
选项 | 说明 |
---|---|
null | 如果为True,表示允许为空,默认值是False |
blank | 如果为True,则该字段允许为空白,默认值是False |
db_column | 字段的名称,如果未指定,则使用属性的名称 |
db_index | 若值为True, 则在表中会为此字段创建索引,默认值是False |
default | 默认值 |
primary_key | 若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用 |
unique | 如果为True, 这个字段在表中必须有唯一值,默认值是False |
max_length | 字段长度限制 |
DateField.auto_now | 修改数据时,更新时间,使用save方法才会有用 |
DateField.auto_now_add | 第一次添加会将当前时间设置进去,修改不会 |
在完成数据的导入之后,我们就要在虚拟机中进行迁移。移动到项目目录下。
python manage.py makemigrations
命令后面可以跟app名称,指定对某个app的模型进行映射,如果没有写,就所有的app都回去创建映射文件。再次之前,你必须保证你的app都在settings里面注册了。
在迁移完之后,我们需要将迁移的数据提交给数据库(在虚拟机中且在目录下):
python manage.py migrate
我们可以这样理解,迁移是将我们在user类中定义的数据项转化为create table这样的mysql语句,然后就是将语句提交到数据库中创建表。
创建完成后,我们在数据库中查看是否完成操作:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| django_test |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use django_test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_django_test |
+-----------------------+
| django_migrations |
| six_user |
+-----------------------+
2 rows in set (0.00 sec)
mysql> describ