设置 Django 以使用 MySQL

2025-03-13 08:59:00
admin
原创
76
摘要:问题描述:我想暂时放弃 PHP,学习 Python。为了使用 Python 进行 Web 开发,我需要一个框架来帮助制作模板和其他东西。我有一台非生产服务器,用于测试所有 Web 开发内容。它是 Debian 7.1 LAMP 堆栈,运行 MariaDB 而不是常见的 MySQL-server 包。昨天我安装...

问题描述:

我想暂时放弃 PHP,学习 Python。为了使用 Python 进行 Web 开发,我需要一个框架来帮助制作模板和其他东西。

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

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

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

然而,我必须进入我的 firstweb 文件夹并运行

python manage.py runserver myip:port

而且它确实有效。没有问题。但我想知道它是否应该这样工作,以及这是否会导致后续问题?

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

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


解决方案 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)

此外,mysql 客户端包已针对 python 3 进行了更改(MySQL-Client仅适用于 python 2)

pip3 install mysqlclient

解决方案 2:

首先请运行以下命令来安装 python 依赖项,否则 python runserver 命令将会抛出错误。

sudo apt-get install libmysqlclient-dev
sudo pip install MySQL-python

然后按照#Andy 的定义配置settings.py 文件,最后执行:

python manage.py runserver

玩得开心..!!

解决方案 3:

如果你使用的是 python3.x,则运行以下命令

pip install mysqlclient

然后像这样更改setting.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB',
     'USER': 'username',
    'PASSWORD': 'passwd',
  }
  }

解决方案 4:

如上所述,您可以首先从https://www.apachefriends.org/download.html轻松安装 xampp
,然后按照说明进行操作:

  1. http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/安装并运行 xampp ,然后从 GUI 启动 Apache Web 服务器和 MySQL 数据库。

  2. 您可以根据需要配置 Web 服务器,但默认情况下 Web 服务器位于http://localhost:80,数据库位于port 3306,PhpMyadmin 位于http://localhost/phpmyadmin/

  3. 从这里您可以查看您的数据库并使用非常友好的 GUI 访问它们。

  4. 创建您想要在 Django 项目上使用的任何数据库。

  5. 编辑您的settings.py文件如下:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB_NAME',
    'HOST': '127.0.0.1',
    'PORT': '3306',
    'USER': 'root',
    'PASSWORD': '',
}}
  1. 在 virtualenv 中安装以下软件包(如果您在 virtualenv 上使用 django,这是更可取的):

sudo apt-get 安装 libmysqlclient-dev

pip 安装 MySQL-python

  1. 就是这样!您已经以非常简单的方式使用 MySQL 配置了 Django。

  2. 现在运行你的 Django 项目:

python 管理.py 迁移

python manage.py 运行服务器

解决方案 5:

实际上,不同的环境、python 版本等都存在很多问题。您可能还需要安装 python dev 文件,因此为了“强制”安装,我将运行以下所有文件:

sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install MySQL-python
pip install pymysql
pip install mysqlclient

你应该接受这个答案。如果这对你来说很重要,你可以删除不必要的包。

解决方案 6:

运行这些命令

sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install MySQL-python 
pip install pymysql
pip install mysqlclient

然后像这样配置settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '123456',
    }
}

享受mysql连接

解决方案 7:

  1. 安装mysqlclient

sudo pip3 install mysqlclient

如果出现错误:

命令“python setup.py egg_info”在 /tmp/pip-install-dbljg4tx/mysqlclient/ 中失败,错误代码为 1

然后:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. 修改settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'website',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTION': {'init_command':"SET sql_mode='STRICT_TRANS_TABLE',"},
    }
}

解决方案 8:

Andy 的回答很有帮助,但如果你担心在 django 设置中暴露数据库密码,我建议遵循 mysql 连接上的 django 官方配置:https://docs.djangoproject.com/en/1.7/ref/databases/

此处引用如下:

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


# my.cnf
[client]
database = NAME
user = USER
password = PASSWORD
default-character-set = utf8

要替换设置中的“HOST”:“127.0.0.1”,只需将其添加到 my.cnf 中:

# my.cnf
[client]
database = NAME
host = HOST NAME or IP
user = USER
password = PASSWORD
default-character-set = utf8

另一个有用的选项是设置 django 的存储引擎,你可能希望在你的 setting.py 中使用它:

'OPTIONS': {
   'init_command': 'SET storage_engine=INNODB',
}

解决方案 9:

设置.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'django',
    'USER': 'root',
    'PASSWORD': '*****',
    'HOST': '***.***.***.***',
    'PORT': '3306',
    'OPTIONS': {
        'autocommit': True,
    },
}

}

然后:

python manage.py migrate

如果成功将生成这些表:

auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_admin_log
django_content_type
django_migrations
django_session

您就可以使用 mysql。

这是一个展示示例,在 Django 版本 1.11.5 上测试:
Django-pool-showcase

解决方案 10:

这是一个相当老的问题,但如果有人正在使用最新版本的 python 和 django,你可以按照以下步骤操作

Note - Versions
    Python version - 3.9.5
    Django version - 3.2.4
    MySQL server version - 5.7

安装django后,运行以下命令

pip install mysqlclient

在我的 IDE 中,如果我执行pip list此操作,则会列出软件包和版本

Package     Version
----------- -------
asgiref     3.3.4
Django      3.2.4
mysqlclient 2.0.3
pip         21.1.2
pytz        2021.1
setuptools  57.0.0
sqlparse    0.4.1

现在,确保您已经创建了要使用的数据库模式。

settings.py在DATABASES 下的 django 项目中的文件中更改

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

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',
    }
}

你应该能够同时运行

python manage.py makemigrations

python manage.py migrate

解决方案 11:

按照给定的步骤进行设置以使用 MySQL 数据库:

1) Install MySQL Database Connector :

    sudo apt-get install libmysqlclient-dev

2) Install the mysqlclient library :

    pip install mysqlclient

3) Install MySQL server, with the following command :

    sudo apt-get install mysql-server

4) Create the Database :

    i) Verify that the MySQL service is running:

        systemctl status mysql.service

    ii) Log in with your MySQL credentials using the following command where -u is the flag for declaring your username and -p is the flag that tells MySQL that this user requires a password :  

        mysql -u db_user -p


    iii) CREATE DATABASE db_name;

    iv) Exit MySQL server, press CTRL + D.

5) Add the MySQL Database Connection to your Application:

    i) Navigate to the settings.py file and replace the current DATABASES lines with the following:

        # Database
        # https://docs.djangoproject.com/en/2.0/ref/settings/#databases

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

    ii) Next, let’s edit the config file so that it has your MySQL credentials. Use vi as sudo to edit the file and add the following information:

        sudo vi /etc/mysql/my.cnf

        database = db_name
        user = db_user
        password = db_password
        default-character-set = utf8

6) Once the file has been edited, we need to restart MySQL for the changes to take effect :

    systemctl daemon-reload

    systemctl restart mysql

7) Test MySQL Connection to Application:

    python manage.py runserver your-server-ip:8000

解决方案 12:

您必须先创建一个 MySQL 数据库。然后转到settings.py文件并'DATABASES'使用您的 MySQL 凭据编辑字典:

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

这里是设置 Django 在虚拟环境中使用 MySQL 的完整安装指南:

http://codex.themedelta.com/how-to-install-django-with-mysql-in-a-virtualenv-on-linux/

解决方案 13:

python3 -m pip install mysql-connector
pip install mysqlclient

这些命令有助于在 django 中设置 mysql db 而不会出现错误

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4062  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2781  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   101  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   118  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   103  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用