[Python自学] day-19 (2) (Django-ORM)

本章目录:

一、ORM的分类

ORM一般分为两类:

1.DB first:先在DB中创建数据库、表结构,然后自动生成代码中的类。在后续操作中直接在代码中操作相应的类即可。

2.Code first:直接在代码中实现各种类,然后执行,代码自动在DB中创建对应的数据库和表结构。

最常用的是后者,即Code First类型的ORM。例如 [Python自学] day-12 (Mysql、事务、索引、ORM) 中的SQLAlchemy,我们即将要了解的Django ORM也属于Code first。

二、利用ORM创建表

在我们不修改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等常用的东西。

三、配置使用Mysql数据库

查看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

四、

猜你喜欢

转载自www.cnblogs.com/leokale-zz/p/12056917.html