【问题标题】:Setting Django up to use MySQL设置 Django 以使用 MySQL
【发布时间】:2013-10-11 23:00:54
【问题描述】:

我想稍微远离 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 区域吗?

【问题讨论】:

  • 注意:截至 01/2016,没有适用于 python 3.5.x 的 MySQL 驱动程序。请参阅stackoverflow.com/questions/34456770/… 所以只能使用 Python 3.4。您仍然可以使用 Django 1.9(截至 01/2016 的最新稳定版本)。
  • 有一个使用 PyMySQL 的解决方法,如 here 所述。您基本上安装并导入pymysql 并在settings.py 中指定DATABASES 字典后立即添加pymysql.version_info = (1, 4, 2, "final", 0)pymysql.install_as_MySQLdb()。 @TomasTintera

标签: python mysql django debian


【解决方案1】:

这是一个相当古老的问题,但如果有人正在研究任何最新版本的 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更改

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

【讨论】:

    【解决方案2】:
    python3 -m pip install mysql-connector
    pip install mysqlclient
    

    这些命令有助于在 django 中正确设置 mysql 数据库

    【讨论】:

    • 请在您的答案中添加一些解释,以便其他人可以从中学习
    【解决方案3】:
    1. 安装mysqlclient

    sudo pip3 install mysqlclient

    如果出现错误:

    命令“python setup.py egg_info”失败,错误代码为 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',"},
          }
      }
      

    【讨论】:

      【解决方案4】:

      运行这些命令

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

      【讨论】:

        【解决方案5】:

        MySQL support 很容易添加。在您的 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',
            }
        }
        

        您还可以选择使用 MySQL option files,从 Django 1.7 开始。您可以通过像这样设置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 参数允许您自己以外的机器访问您的开发应用程序。准备好部署应用程序后,我建议您查看 Deploying Django 上的章节 djangobook

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

        CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin
        

        如果您使用Oracle's MySQL connector,您的ENGINE 行应如下所示:

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

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

        brew install mysql (MacOS)
        

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

        pip3 install mysqlclient
        

        【讨论】:

          【解决方案6】:

          按照给定的步骤设置它以使用 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
          

          【讨论】:

            【解决方案7】:

            settings.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

            【讨论】:

              【解决方案8】:

              您必须先创建一个 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/

              【讨论】:

                【解决方案9】:

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

                pip install mysqlclient
                

                然后像这样更改setting.py

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

                【讨论】:

                • 我在 python 3.6 中使用 virtualenv。这救了我的命。谢谢你。另外,记得先在mysql中创建数据库
                【解决方案10】:

                如上所述,您可以先从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': '',
                  }}
                  
                6. 在 virtualenv 中安装以下包(如果您在 virtualenv 上使用 django,则更可取):

                  sudo apt-get install libmysqlclient-dev

                  pip 安装 MySQL-python

                7. 就是这样!!你已经以一种非常简单的方式配置了 Django 和 MySQL。

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

                  python manage.py 迁移

                  python manage.py runserver

                【讨论】:

                • Wii sudo apt-get install libmysqlclient-dev 安装在virtualenv 还是全局?
                【解决方案11】:

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

                【讨论】:

                  【解决方案12】:

                  其实不同的环境,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
                  

                  您应该接受已接受的答案。如果这对您很重要,可以删除不必要的包。

                  【讨论】:

                    【解决方案13】:

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

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

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

                    python manage.py runserver
                    

                    玩得开心..!!

                    【讨论】:

                      猜你喜欢
                      • 2010-12-19
                      • 2013-07-13
                      • 1970-01-01
                      • 2023-03-06
                      • 2018-07-28
                      • 2017-11-05
                      • 2018-12-23
                      • 2012-04-21
                      • 2021-03-09
                      相关资源
                      最近更新 更多