Thiết lập Django để sử dụng MySQL


171

Tôi muốn tránh xa PHP một chút và học Python. Để thực hiện phát triển web với Python, tôi sẽ cần một khung để trợ giúp với việc tạo khuôn mẫu và những thứ khác.

Tôi có một máy chủ không sản xuất mà tôi sử dụng để kiểm tra tất cả các công cụ phát triển web trên đó. Đó là ngăn xếp LAMP Debian 7.1 chạy MariaDB thay vì gói máy chủ MySQL thông thường.

Hôm qua tôi đã cài đặt Django và tạo dự án đầu tiên của tôi được gọi là Firstweb . Tôi chưa thay đổi bất kỳ cài đặt nào.

Đây là mảnh lớn đầu tiên của tôi. Trong hướng dẫn, tôi đã theo dõi anh chàng cài đặt Django, bắt đầu dự án đầu tiên của mình, khởi động lại Apache và Django chỉ hoạt động từ đó trở đi. Anh ta vào trình duyệt của mình và đi đến trang mặc định Django mà không gặp vấn đề gì.

Tuy nhiên, tôi phải cd vào thư mục Firstweb của mình và chạy

python manage.py runserver myip:port

Và nó hoạt động. Không vấn đề gì. Nhưng tôi tự hỏi nếu nó được cho là hoạt động như thế này, và nếu điều này sẽ gây ra vấn đề xuống dòng?

Câu hỏi thứ hai của tôi là tôi muốn thiết lập nó để nó sử dụng cơ sở dữ liệu MySQL của tôi. Tôi truy cập vào cài đặt của mình dưới / Firstweb / Firstweb và tôi thấy ĐỘNG CƠ và TÊN nhưng tôi không chắc nên đặt gì ở đây.

Và sau đó trong các khu vực NGƯỜI DÙNG, PASSWORD và HOST đây có phải là cơ sở dữ liệu của tôi và thông tin đăng nhập của nó không? Nếu tôi đang sử dụng localhost, tôi có thể đặt localhost trong khu vực HOST không?


Lưu ý: vì od 01/2016 không có trình điều khiển MySQL cho python 3.5.x. Xem stackoverflow.com/questions 432456770 / Do Vì vậy, chỉ sử dụng tối đa Python 3.4. Bạn vẫn có thể sử dụng Django 1.9 (bản phát hành ổn định mới nhất kể từ ngày 01/2016).
Tomas Tintera

Câu trả lời:


316

Hỗ trợ MySQL là đơn giản để thêm. Trong DATABASEStừ điển của bạn , bạn sẽ có một mục như thế này:

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

Bạn cũng có tùy chọn sử dụng các tệp tùy chọn MySQL , kể từ Django 1.7. Bạn có thể thực hiện điều này bằng cách đặt DATABASESmảng của bạn như vậy:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}

Bạn cũng cần tạo /path/to/my.cnftệp có cài đặt tương tự ở trên

[client]
database = DB_NAME
host = localhost
user = DB_USER
password = DB_PASSWORD
default-character-set = utf8

Với phương thức kết nối mới này trong Django 1.7, điều quan trọng là phải biết các kết nối thứ tự được thiết lập:

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

Nói cách khác, nếu bạn đặt tên của cơ sở dữ liệu trong TÙY CHỌN, việc này sẽ được ưu tiên hơn NAME, sẽ ghi đè lên bất cứ điều gì trong tệp tùy chọn MySQL.


Nếu bạn chỉ đang thử nghiệm ứng dụng của mình trên máy cục bộ, bạn có thể sử dụng

python manage.py runserver

Thêm ip:portđối số cho phép các máy khác ngoài máy của bạn truy cập vào ứng dụng phát triển của bạn. Khi bạn đã sẵn sàng triển khai ứng dụng của mình, tôi khuyên bạn nên xem chương về Triển khai Django trên djangobook

Bộ ký tự mặc định của Mysql thường không phải là utf-8, do đó hãy đảm bảo tạo cơ sở dữ liệu của bạn bằng cách sử dụng sql này:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Nếu bạn đang sử dụng trình kết nối MySQL của Oracle,ENGINE dòng của bạn sẽ như thế này:

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

Lưu ý rằng trước tiên bạn sẽ cần cài đặt mysql trên hệ điều hành của bạn.

brew install mysql (MacOS)

Ngoài ra, gói máy khách mysql đã thay đổi cho python 3 ( MySQL-Clientchỉ hoạt động với python 2)

pip3 install mysqlclient

26

Trước tiên, hãy chạy các lệnh dưới đây để cài đặt phụ thuộc python nếu không lệnh python ranerver sẽ ném lỗi.

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

Sau đó định cấu hình tệp settings.txt như được xác định bởi #Andy và ở lần thực hiện cuối cùng:

python manage.py runserver

Chúc vui vẻ..!!


18

Nếu bạn đang sử dụng python3.x thì Chạy bên dưới lệnh

pip install mysqlclient

Sau đó thay đổi cài đặt như

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

1
Tôi đang sử dụng virtualenv với python 3.6. Điều này cứu mạng tôi. Cảm ơn bạn. Ngoài ra, hãy nhớ tạo DB trong mysql trước
Fred

15

Như tất cả đã nói ở trên, bạn có thể dễ dàng cài đặt xampp trước từ https://www.apachefriends.org/doad.html Sau đó làm theo hướng dẫn như:

  1. Cài đặt và chạy xampp từ http://www.unixmen.com/install-xampp-stack-ubfox-14-04/ , sau đó khởi động Máy chủ web Apache và Cơ sở dữ liệu MySQL từ GUI.
  2. Bạn có thể định cấu hình máy chủ web của mình theo ý muốn nhưng theo mặc định máy chủ web có tại http://localhost:80và cơ sở dữ liệu tại port 3306và PhpMyadmin tạihttp://localhost/phpmyadmin/
  3. Từ đây bạn có thể thấy cơ sở dữ liệu của mình và truy cập chúng bằng GUI rất thân thiện.
  4. Tạo bất kỳ cơ sở dữ liệu nào bạn muốn sử dụng trên Dự án Django.
  5. Chỉnh sửa settings.pytập tin của bạn như:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
  6. Cài đặt các gói sau trong virtualenv (nếu bạn đang sử dụng django trên virtualenv, được ưu tiên hơn):

    sudo apt-get cài đặt libmysqlclient-dev

    Pip cài đặt MySQL-python

  7. Đó là nó!! bạn đã cấu hình Django với MySQL một cách rất dễ dàng.

  8. Bây giờ hãy chạy dự án Django của bạn:

    python Manage.txt di chuyển

    quản lý python


7

Trên thực tế, có nhiều vấn đề với các môi trường khác nhau, các phiên bản python, v.v. Bạn cũng có thể cần phải cài đặt các tệp dev python, vì vậy để 'brute-force' cài đặt, tôi sẽ chạy tất cả những thứ sau:

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

Bạn nên tốt để đi với câu trả lời được chấp nhận. Và có thể loại bỏ các gói không cần thiết nếu điều đó quan trọng với bạn.


7

Chạy các lệnh này

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

Sau đó định cấu hình cài đặt như

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '123456',
    }
}

Tận hưởng kết nối mysql


4

Câu trả lời của Andy giúp nhưng nếu bạn lo ngại về việc lộ mật khẩu cơ sở dữ liệu trong cài đặt django của mình, tôi khuyên bạn nên theo cấu hình chính thức của django trên kết nối mysql: https://docs.djangoproject.com/en/1.7/ref/database/

Trích dẫn ở đây là:

# 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

Để thay thế 'HOST': '127.0.0.1' trong cài đặt, chỉ cần thêm nó vào my.cnf:

# my.cnf
[client]
database = NAME
host = HOST NAME or IP
user = USER
password = PASSWORD
default-character-set = utf8

Một TÙY CHỌN khác hữu ích, là đặt công cụ lưu trữ của bạn cho django, bạn có thể muốn nó trong cài đặt của bạn:

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

4

cài đặt

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'django',
    'USER': 'root',
    'PASSWORD': '*****',
    'HOST': '***.***.***.***',
    'PORT': '3306',
    'OPTIONS': {
        'autocommit': True,
    },
}

}

sau đó:

python manage.py migrate

nếu thành công sẽ tạo ra các bảng luận án:

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

và bạn sẽ có thể sử dụng mysql.

đây là một ví dụ giới thiệu, thử nghiệm trên phiên bản Django 1.11.5: Django-pool-showcase


3
  1. Tải về mysqlclient

sudo pip3 install mysqlclient

nếu bạn gặp lỗi:

Lệnh "python setup.py egg_info" không thành công với mã lỗi 1 in / tmp / pip-install-dbljg4tx / mysqlclient /

sau đó:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Sửa đổi cài đặt

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

1

Làm theo các bước đã cho để thiết lập nó để sử dụng cơ sở dữ liệu 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, lets 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

0

Bạn phải tạo cơ sở dữ liệu MySQL trước. Sau đó đi đến settings.pytệp và chỉnh sửa 'DATABASES'từ điển với thông tin đăng nhập MySQL của bạn:

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

Dưới đây là hướng dẫn cài đặt hoàn chỉnh để thiết lập Django để sử dụng MySQL trên virtualenv:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.