Setting Django up to use MySQL
我想稍微离开PHP并学习Python。为了使用Python进行Web开发,我需要一个框架来帮助模板化和其他事情。
我有一个非生产服务器,用于测试所有Web开发的东西。它是Debian 7.1 LAMP堆栈,它运行MariaDB而不是常见的MySQL服务器包。
昨天我安装了Django并创建了我的第一个名为firstweb的项目。我还没有改变任何设置。
这是我的第一个大混乱。在教程中,我跟着安装了Django的人,启动了他的第一个项目,重新启动了Apache,Django从此开始工作。他去了他的浏览器,没有问题就去了Django默认页面。
但是,我必须进入我的firstweb文件夹并运行
1 | python manage.py runserver myip:port |
它有效。没问题。但是我想知道它是否应该像这样工作,如果这会引起问题呢?
我的第二个问题是我想要设置它以便它使用我的MySQL数据库。我进入/ firstweb / firstweb下的settings.py,我看到ENGINE和NAME,但我不确定要放在这里。
然后在USER,PASSWORD和HOST区域是我的数据库及其凭据?如果我使用localhost,我可以将localhost放在HOST区域吗?
MySQL支持很容易添加。在
1 2 3 4 5 6 7 8 9 10 | 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选项文件。您可以通过设置
1 2 3 4 5 6 7 8 | DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'OPTIONS': { 'read_default_file': '/path/to/my.cnf', }, } } |
您还需要使用上面的类似设置创建
1 2 3 4 5 6 | [client] database = DB_NAME host = localhost user = DB_USER password = DB_PASSWORD default-character-set = utf8 |
使用这种在Django 1.7中连接的新方法,了解订单连接是很重要的:
1 2 3 | 1. OPTIONS. 2. NAME, USER, PASSWORD, HOST, PORT 3. MySQL option files. |
In other words, if you set the name of the database in OPTIONS, this will take precedence over NAME, which would override anything in a MySQL option file.
如果您只是在本地计算机上测试应用程序,则可以使用
1 | python manage.py runserver |
添加
Mysql默认字符集通常不是utf-8,因此请确保使用此sql创建数据库:
1 | CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin |
如果您使用的是Oracle的MySQL连接器,那么?x4>行应该如下所示:
1 | 'ENGINE': 'mysql.connector.django', |
请注意,您首先需要在您的操作系统上安装mysql。
1 | brew install mysql (MacOS) |
此外,mysql客户端包已更改为python 3(
1 | pip3 install mysqlclient |
首先请运行以下命令来安装python依赖项,否则python runserver命令将抛出错误。
1 2 | sudo apt-get install libmysqlclient-dev sudo pip install MySQL-python |
然后配置#Andy定义的settings.py文件,并在最后一次执行时:
1 | python manage.py runserver |
玩得开心..!!
如果您使用的是python3.x,请运行以下命令
1 | pip install mysqlclient |
然后更改setting.py之类的
1 2 3 4 5 6 7 8 | DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'DB', 'USER': 'username', 'PASSWORD': 'passwd', } } |
如上所述,您可以从https://www.apachefriends.org/download.html轻松安装xampp
然后按照说明操作:
编辑您的
1 2 3 4 5 6 7 8 9 | 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 install libmysqlclient-dev
pip安装MySQL-python
而已!!您已经以非常简单的方式使用MySQL配置了Django。
现在运行你的Django项目:
python manage.py migrate
python manage.py runserver
实际上,不同的环境有许多问题,python版本等等。您可能还需要安装python dev文件,因此要"强制"安装我将运行所有这些:
1 2 3 4 5 | sudo apt-get install python-dev python3-dev sudo apt-get install libmysqlclient-dev pip install MySQL-python pip install pymysql pip install mysqlclient |
你应该好好接受公认的答案。如果这对你很重要,可以删除不必要的包裹。
运行这些命令
sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip安装MySQL-python
pip install pymysql
pip install mysqlclient
然后配置settings.py之类的
1 2 3 4 5 6 7 8 9 10 | DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_db', 'HOST': '127.0.0.1', 'PORT': '3306', 'USER': 'root', 'PASSWORD': '123456', } } |
享受mysql连接
Andy的回答有帮助但是如果你担心在你的django设置中暴露你的数据库密码,我建议你在mysql连接上关注django官方配置:https://docs.djangoproject.com/en/1.7/ref/databases/
在这里引用为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 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:
1 2 3 4 5 6 7 | # my.cnf [client] database = NAME host = HOST NAME or IP user = USER password = PASSWORD default-character-set = utf8 |
另一个有用的OPTION是为django设置存储引擎,你可能需要在你的setting.py中:
1 2 3 | 'OPTIONS': { 'init_command': 'SET storage_engine=INNODB', } |
settings.py
1 2 3 4 5 6 7 8 9 10 11 12 | DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django', 'USER': 'root', 'PASSWORD': '*****', 'HOST': '***.***.***.***', 'PORT': '3306', 'OPTIONS': { 'autocommit': True, }, } |
}
然后:
1 | python manage.py migrate |
如果成功将生成这些表:
1 2 3 4 5 6 7 8 9 10 | 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的池展示
按照给定的步骤设置它以使用MySQL数据库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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 |
您必须首先创建一个MySQL数据库。然后转到
1 2 3 4 5 6 7 8 9 10 | 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/