设置 Django 以使用 MySQL
- 2025-03-13 08:59:00
- admin 原创
- 76
问题描述:
我想暂时放弃 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
,然后按照说明进行操作:
从http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/安装并运行 xampp ,然后从 GUI 启动 Apache Web 服务器和 MySQL 数据库。
您可以根据需要配置 Web 服务器,但默认情况下 Web 服务器位于
http://localhost:80
,数据库位于port 3306
,PhpMyadmin 位于http://localhost/phpmyadmin/
从这里您可以查看您的数据库并使用非常友好的 GUI 访问它们。
创建您想要在 Django 项目上使用的任何数据库。
编辑您的
settings.py
文件如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB_NAME',
'HOST': '127.0.0.1',
'PORT': '3306',
'USER': 'root',
'PASSWORD': '',
}}
在 virtualenv 中安装以下软件包(如果您在 virtualenv 上使用 django,这是更可取的):
sudo apt-get 安装 libmysqlclient-dev
pip 安装 MySQL-python
就是这样!您已经以非常简单的方式使用 MySQL 配置了 Django。
现在运行你的 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:
安装
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
修改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 而不会出现错误
扫码咨询,免费领取项目管理大礼包!