Django2.2.1连接MySQL8.0.16数据库

Django2.2.1连接MySQL8.0.16数据库

设置settings.py

注意,不要在DATABASES配置项中打注释,会无法通过编译,并且报错为:
you must define a ‘default’ database

DATABASES = {
    'default': {
 
        'ENGINE': 'django.db.backends.mysql',
 
        'NAME': 'dbtest',    #你的数据库名称
 
        'USER': '****',   #你的数据库用户名
 
        'PASSWORD': '*****', #你的数据库密码
 
        'HOST': '', #你的数据库主机,留空默认为localhost
 
        'PORT': '3306', #你的数据库端口
    }
}

准备

另请注意INSTALLED_APPS文件顶部的设置。它包含在这个Django实例中激活的所有Django应用程序的名称。应用程序可以在多个项目中使用,您可以打包和分发它们以供项目中的其他人使用。

默认情况下,INSTALLED_APPS包含以下应用程序,所有这些应用程序都随Django一起提供:

django.contrib.admin - 管理站点。你很快就会用到它。
django.contrib.auth - 认证系统。
django.contrib.contenttypes - 内容类型的框架。
django.contrib.sessions - 会话框架。
django.contrib.messages - 消息传递框架。
django.contrib.staticfiles - 用于管理静态文件的框架。
默认情况下包含这些应用程序,以方便常见情况。

但是,其中一些应用程序至少使用了一个数据库表,因此我们需要在使用它们之前在数据库中创建表。为此,请运行以下命令:

py manage.py migrate

该migrate命令查看INSTALLED_APPS设置并根据mysite/settings.py文件中的数据库设置和应用程序附带的数据库迁移创建任何必要的数据库表(稍后我们将介绍这些表)。您将看到适用于每次迁移的消息。如果您有兴趣,请运行数据库的命令行客户端并键入\dt(PostgreSQL),(MySQL), (SQLite)或(Oracle)以显示Django创建的表。SHOW TABLES;.schemaSELECT TABLE_NAME FROM USER_TABLES;

创建模型

模型是用于对数据库结构进行修改的。在Django框架的设计思想中,对模型的修改会动态反映到对应的数据库中,这大大方便了对数据库做同步调整,并且不会丢失数据。也方便数据库的迁移工作。

编辑 polls/models.py文件

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

激活模型

要在我们的项目中包含应用程序,我们需要在设置中添加对其配置类的引用INSTALLED_APPS。该 PollsConfig班是在polls/apps.py文件中,所以它的虚线路径’polls.apps.PollsConfig’。编辑mysite/settings.py文件并将该虚线路径添加到INSTALLED_APPS设置中。它看起来像这样:

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

运行命令

py manage.py makemigrations polls

你将会看到类似如下信息:

Migrations for 'polls':
  polls/migrations/0001_initial.py:
    - Create model Choice
    - Create model Question
    - Add field question to choice

通过运行makemigrations,您告诉Django您已对模型进行了一些更改(在这种情况下,您已经创建了新模型),并且您希望将更改存储为迁移。

迁移是Django如何存储对模型(以及数据库模式)的更改 - 它们只是磁盘上的文件。如果您愿意,可以阅读新模型的迁移; 这是文件 polls/migrations/0001_initial.py。不要担心,每次Django制作时都不会读它们,但是如果你想手动调整Django改变的方式,它们的设计是人为可编辑的。

有一个命令可以为您运行迁移并自动管理您的数据库模式 - 这是被调用的migrate,我们马上就会看到它 - 但首先,让我们看看迁移将运行的SQL。该 sqlmigrate命令获取迁移名称并返回其SQL:

py manage.py sqlmigrate polls 0001

你将会看到类似如下信息:

BEGIN;
--
-- Create model Choice
--
CREATE TABLE "polls_choice" (
    "id" serial NOT NULL PRIMARY KEY,
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL
);
--
-- Create model Question
--
CREATE TABLE "polls_question" (
    "id" serial NOT NULL PRIMARY KEY,
    "question_text" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
--
-- Add field question to choice
--
ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL;
ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT;
CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");
ALTER TABLE "polls_choice"
  ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id"
    FOREIGN KEY ("question_id")
    REFERENCES "polls_question" ("id")
    DEFERRABLE INITIALLY DEFERRED;

COMMIT;

请注意以下事项:

确切的输出将根据您使用的数据库而有所不同。上面的示例是为PostgreSQL生成的。
表名是通过组合应用程序的名称(自动生成polls)和模型的小写名字- question和 choice。(您可以覆盖此行为。)
主键(ID)会自动添加。(你也可以覆盖它。)
按照惯例,Django附加"_id"到外键字段名称。(是的,您也可以覆盖它。)
外键关系通过 约束显式化。不要担心零件; 这只是告诉PostgreSQL在事务结束前不强制执行外键。FOREIGN KEYDEFERRABLE
它是根据您正在使用的数据库量身定制的,因此可以自动为您处理特定于数据库的字段类型,如auto_increment(MySQL),serial(PostgreSQL)或(SQLite)。引用字段名称也是如此 - 例如,使用双引号或单引号。integer primary key autoincrement
该sqlmigrate命令实际上并不在数据库上运行迁移 - 它只是将其打印到屏幕上,以便您可以看到SQL Django认为需要什么。它对于检查Django将要执行的操作或者是否有需要SQL脚本进行更改的数据库管理员非常有用。
如果你有兴趣,你也可以跑 ; 这将检查项目中的任何问题,而无需进行迁移或触摸数据库。python manage.py check

现在,migrate再次运行以在数据库中创建这些模型表:

py manage.py migrate

该migrate命令将执行所有尚未应用的迁移(Django跟踪使用数据库中的特殊表来应用哪些迁移django_migrations)并针对您的数据库运行它们 - 实际上,您将对模型所做的更改与模型中的模式同步数据库。

迁移功能非常强大,您可以在开发项目时随时更改模型,而无需删除数据库或表并创建新数据库 - 它专门用于实时升级数据库,而不会丢失数据。我们将在本教程的后续部分中更深入地介绍它们,但是现在,请记住进行模型更改的三步指南:

  1. 更改模型(in models.py)
  2. 运行以创建这些更改的迁移python manage.py makemigrations
  3. 运行以将这些更改应用于数据库。python manage.py migrate

之所以有单独的命令来制作和应用迁移,是因为您将提交迁移到您的版本控制系统并随应用程序一起发送; 它们不仅使您的开发更容易,而且还可供其他开发人员和生产中使用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值