本章目录:
ORM一般分为两类:
1.DB first:先在DB中创建数据库、表结构,然后自动生成代码中的类。在后续操作中直接在代码中操作相应的类即可。
2.Code first:直接在代码中实现各种类,然后执行,代码自动在DB中创建对应的数据库和表结构。
最常用的是后者,即Code First类型的ORM。例如 [Python自学] day-12 (Mysql、事务、索引、ORM) 中的SQLAlchemy,我们即将要了解的Django ORM也属于Code first。
在我们不修改Django数据库配置的情况下,Django默认使用的数据库是sqlite3:
我们暂且使用该默认的数据库。
1.在cmdb APP中的models.py中创建一个类
from django.db import models class UserInfo(models.Model): # ORM会自动帮我们生成一个id列,是自增的 # 生成cmdb_userinfo表,里面含有username和password两列 username = models.CharField(max_length=32) password = models.CharField(max_length=64)
2.使用命令行在数据库中生成表
python manage.py makemigrations
理论上,会在cmdb/migrations中生成一个临时文件。但是这里并未生成,这是因为cmdb这个APP的models.py并未装载到Django中,所以Django找不到该models.py。
3.配置settings.py(重要)
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'cmdb', ]
4.再次执行命令行
D:\pycharm_workspace\secondsite>d:\Dev_apps\Anaconda5.3.0\python.exe manage.py makemigrations Migrations for 'cmdb': cmdb\migrations\0001_initial.py - Create model UserInfo
我们查看cmdb/migrations目录:
然后执行命令:
D:\pycharm_workspace\secondsite>d:\Dev_apps\Anaconda5.3.0\python.exe manage.py migrate Operations to perform: Apply all migrations: admin, auth, cmdb, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying cmdb.0001_initial... OK Applying sessions.0001_initial... OK
我们可以看到,Django除了帮我们执行了cmdb.0001_initial,还执行了一大堆其他的东西,这些东西是Django默认帮我们生成的表,包括sessions等常用的东西。
查看settings.py:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
可以看到,这里配置使用数据库后端为sqlite3。
我们将其修改为Mysql:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname', # 数据库名,这个django不能帮我们创建,需要我们手工创建 'USER': 'root', # 登录用户名 'PASSWORD': 'xxx', # 登录密码 'HOST': '', # IP 'PORT': '', # port } }
修改完settings.py后,执行命令,即可在mysql中创建表:
python manage.py makemigrations
python manage.py migrate
四、