Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设置Django以使用MySQL_Python_Mysql_Django_Debian - Fatal编程技术网

Python 设置Django以使用MySQL

Python 设置Django以使用MySQL,python,mysql,django,debian,Python,Mysql,Django,Debian,我想稍微远离PHP,学习Python。为了使用Python进行web开发,我需要一个框架来帮助模板和其他事情 我有一个非生产服务器,我用它来测试所有的web开发内容。它是一个Debian7.1LAMP堆栈,运行MariaDB而不是常见的MySQL服务器包 昨天我安装了Django并创建了我的第一个项目firstweb。我还没有更改任何设置 这是我的第一个大困惑。在本教程中,我跟踪了安装Django的人,开始了他的第一个项目,重新启动了Apache,Django从此开始工作。他打开浏览器,进入Dj

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

我有一个非生产服务器,我用它来测试所有的web开发内容。它是一个Debian7.1LAMP堆栈,运行MariaDB而不是常见的MySQL服务器包

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

这是我的第一个大困惑。在本教程中,我跟踪了安装Django的人,开始了他的第一个项目,重新启动了Apache,Django从此开始工作。他打开浏览器,进入Django默认页面,没有任何问题

但是,我必须将cd刻录到我的第一个Web文件夹中并运行

python manage.py runserver myip:port
它是有效的。没问题。但我想知道它是否应该像这样工作,这是否会导致后续问题

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

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

添加起来很简单。在
数据库
词典中,您将有如下条目:

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',
    }
}
'ENGINE': 'mysql.connector.django',
从Django 1.7开始,您还可以选择使用MySQL。您可以通过如下方式设置
数据库
数组来实现这一点:

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。选项。
2.名称、用户、密码、主机、端口
3.MySQL选项文件。
换句话说,如果您在OPTIONS中设置数据库的名称,它将优先于name,后者将覆盖MySQL选项文件中的任何内容


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

python manage.py runserver
添加
ip:port
参数允许您自己以外的计算机访问您的开发应用程序。一旦准备好部署应用程序,我建议您先看一下

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

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin
如果您正在使用
引擎
行,则应如下所示:

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',
    }
}
'ENGINE': 'mysql.connector.django',

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

brew install mysql (MacOS)
另外,Python3的mysql客户端包也发生了更改(
mysql客户端
仅适用于Python2)


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

sudo apt-get install libmysqlclient-dev
sudo pip install MySQL-python
然后按照#Andy的定义配置settings.py文件,最后执行:

python manage.py runserver

玩得开心

如上所述,您可以从 然后按照以下说明进行操作:

  • 从安装并运行xampp,然后从GUI启动Apache Web服务器和MySQL数据库
  • 您可以根据需要配置web服务器,但默认情况下,web服务器位于
    http://localhost:80
    和数据库位于端口3306,PhpMyadmin位于端口3306http://localhost/phpmyadmin/
  • 从这里您可以看到您的数据库,并使用非常友好的GUI访问它们
  • 创建要在Django项目上使用的任何数据库
  • 编辑
    设置.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 manage.py迁移

    python manage.py运行服务器


  • 实际上,不同的环境、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官方配置:

    此处引述如下:

    # 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
    
    要替换设置中的“主机”:“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',
    }
    

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


    运行这些命令

    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
    
    然后像这样更改setting.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,
        },
    }
    
    }

    然后:

    如果成功,将生成这些表:

    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版上测试:

    按照给定的步骤将其设置为使用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
    
  • 安装mysqlclient
  • sudo pip3安装mysqlclient

    如果出现错误:

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

    然后:


  • 修改设置.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',"},
        }
    }
    

  • 这些命令有助于在django中无错误地设置mysql db

    注意:截至2016年1月1日,python 3.5.x没有mysql驱动程序。看到了吧,就用光了
    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