设置Django以使用MySQL

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

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

昨天,我安装了Django并创建了我的第一个项目,名为第一网。我尚未更改任何设置。

这是我的第一大困惑。在教程中,我跟着那个家伙安装了Django,开始了他的第一个项目,重启了Apache,Django从那时起就开始工作了。他打开浏览器,进入Django默认页面,没有任何问题。

然而,我必须将CD放入我的FirstWeb文件夹并运行

python manage.py runserver myip:port

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

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

然后在用户、密码和主机区域中,这是我的数据库及其凭据吗?如果我使用的是本地主机,我可以只将本地主机放在主机区域吗?

366901 次浏览

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

从Django1.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

对于Django1.7中的这种新连接方法,了解建立连接的顺序非常重要:

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

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


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

python manage.py runserver

添加__abc0参数将允许您自己的计算机以外的计算机访问您的开发应用程序。一旦您准备好部署应用程序,我建议您查看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)

此外,Python3的MySQL客户端包也发生了变化(MySQL-Client仅适用于Python2)。

pip3 install mysqlclient

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

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

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

python manage.py runserver

玩得开心.!

如上所述,您可以首先从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. 从这里你可以看到你的数据库,并使用非常友好的图形用户界面访问它们。
  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': '',
    }}
    
  6. Install the following packages in the virtualenv (if you're using django on virtualenv, which is more preferred):

    sudo apt-get install libmysqlclient-dev

    pip install MySQL-python

  7. That's it!! you have configured Django with MySQL in a very easy way.

  8. Now run your Django project:

    python manage.py migrate

    python manage.py runserver

实际上,不同的环境、Python版本等存在许多问题。您可能还需要安装Python开发文件,因此为了“暴力”安装,我将运行所有这些:

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

你应该很好地接受公认的答案。并可以删除不必要的软件包,如果这对您很重要的话。

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设置存储引擎,您可能希望在您的设置中使用它。py:

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

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

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以在virtualenv上使用MySQL的完整安装指南:

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

运行这些命令

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连接

如果您使用的是python3.X,请运行下面的命令

pip install mysqlclient

然后像这样更改设置.py

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

设置.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.

这是一个Showcase示例,在Django版本1.1 1.5上测试: Django-pool-showcase

按照给定的步骤设置使用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
  1. 安装mysqlclient

sudo pip3 install mysqlclient

如果出现错误:

命令“ python setup.py egg_信息”失败,错误代码为1 /TMP/pip-install-dbljg4tx/mysqlclient/

然后:

 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',"},
    }
    }
    
python3 -m pip install mysql-connector
pip install mysqlclient

这些命令有助于在Django中设置MySQL数据库而不出错

这是一个相当古老的问题,但是如果有人正在使用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

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

在Django项目的settings.py文件中,在Databases Change下

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