小编典典

设置 Django 以使用 MySQL

all

我想稍微远离 PHP 并学习 Python。为了使用 Python 进行 Web 开发,我需要一个框架来帮助进行模板和其他事情。

我有一个非生产服务器,用于测试所有 Web 开发内容。它是一个 Debian 7.1 LAMP 堆栈,运行 MariaDB 而不是常见的 MySQL-server 包。

昨天我安装了 Django 并创建了我的第一个名为firstweb的项目。我还没有更改任何设置。

这是我的第一个大困惑。在教程中,我跟随那个人安装了 Django,开始了他的第一个项目,重新启动了 Apache,从那时起 Django 就开始工作了。他打开浏览器,毫无问题地进入了 Django 默认页面。

但是,我必须 cd 进入我的 firstweb 文件夹并运行

python manage.py runserver myip:port

它有效。没问题。但我想知道它是否应该像这样工作,这是否会导致问题?

我的第二个问题是我想设置它以便它使用我的 MySQL 数据库。我进入 /firstweb/firstweb 下的 settings.py 并看到 ENGINE 和 NAME 但我不确定放在这里的内容。

然后在 USER、PASSWORD 和 HOST 区域中,这是我的数据库及其凭据吗?如果我使用localhost我可以将localhost放在 HOST 区域吗?


阅读 66

收藏
2022-07-09

共1个答案

小编典典

MySQL 支持很容易添加。在您的DATABASES字典中,您将有这样的条目:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'DB_NAME',
        'USER': 'DB_USER',
        'PASSWORD': 'DB_PASSWORD',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}

从 Django 1.7 开始,您还可以选择使用
MySQL选项文件。您可以通过DATABASES像这样设置数组来完成此操作:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}

您还需要/path/to/my.cnf从上面创建具有类似设置的文件

[client]
database = DB_NAME
host = localhost
user = DB_USER
password = DB_PASSWORD
default-character-set = utf8

使用 Django 1.7 中的这种新连接方法,了解建立连接的顺序很重要:

1. OPTIONS.
2. NAME, USER, PASSWORD, HOST, PORT
3. MySQL option files.

换句话说,如果您在 OPTIONS 中设置数据库的名称,这将优先于 NAME,这将覆盖 MySQL 选项文件中的任何内容。


如果您只是在本地机器上测试您的应用程序,您可以使用

python manage.py runserver

添加ip:port参数允许您自己以外的机器访问您的开发应用程序。准备好部署应用程序后,我建议您查看djangobook上的部署
Django一章

Mysql 默认字符集通常不是 utf-8,因此请确保使用此 sql 创建数据库:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

如果您使用Oracle 的 MySQL 连接器,您的ENGINE行应如下所示:

'ENGINE': 'mysql.connector.django',

请注意,您首先需要在您的操作系统上安装 mysql。

brew install mysql (MacOS)

此外,python 3 的 mysql 客户端包已更改(MySQL-Client仅适用于 python 2)

pip3 install mysqlclient
2022-07-09