Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Django đặt Công cụ lưu trữ &Bộ mã mặc định

Tôi không nghĩ rằng bạn có thể thay đổi công cụ lưu trữ trên cơ sở từng bảng, nhưng bạn có thể làm điều đó trên cơ sở từng cơ sở dữ liệu. Tất nhiên, điều này có nghĩa là các ràng buộc khóa ngoại InnoDB, chẳng hạn, không thể áp dụng cho khóa ngoại cho các bảng MyISAM.

Vì vậy, bạn cần khai báo hai "cơ sở dữ liệu", rất có thể nằm trên cùng một máy chủ:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        #...
    }
    'innodb': {
        'ENGINE': 'django.db.backends.mysql',
        #...
        'OPTIONS': { 'init_command': 'SET storage_engine=INNODB;' }
    }
}

Và bạn chỉ cần áp dụng using('innodb') để truy vấn các bảng trong vùng đất InnoDB.

Đối với UTF-8, một lần nữa, tôi nghĩ bạn cần làm điều này ở cấp cơ sở dữ liệu. Tôi không nghĩ là syncdb tạo cơ sở dữ liệu cho bạn, chỉ các bảng. Bạn vẫn nên tạo cơ sở dữ liệu theo cách thủ công, vì vậy bạn có thể đặt các đặc quyền ngay trước khi chạy syncdb . Lệnh tạo cơ sở dữ liệu bạn muốn là:

CREATE DATABASE django CHARACTER SET utf8;

Điều đó nói rằng, tôi thường khuyên mọi người nên tạo hai người dùng django trong cơ sở dữ liệu:một cho công việc giản đồ cơ sở dữ liệu ("quản trị") và một cho mọi thứ khác (với các mật khẩu khác nhau):

CREATE DATABASE django CHARACTER SET utf8;
CREATE USER 'django_site'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON django.* TO django_site;
CREATE USER 'django_admin'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON django.* TO django_admin;
GRANT CREATE, DROP, ALTER, INDEX, LOCK TABLES ON django.* TO django_admin;
FLUSH PRIVILEGES;

(Lưu ý rằng điều này cần được thực hiện cho từng cơ sở dữ liệu.)

Để điều này hoạt động, bạn cần sửa đổi manage.py :

import sys
if len(sys.argv) >= 2 and sys.argv[1] in ["syncdb", "dbshell", "migrate"]:
    os.environ['DJANGO_ACCESS'] = "ADMIN"

Sau đó, trong settings.py của bạn , sử dụng biến môi trường để chọn cài đặt phù hợp. Đảm bảo rằng người dùng của trang web (tức là không phải quản trị viên) là người dùng mặc định.

(Ngoài ra, tôi không lưu trữ thiết lập cơ sở dữ liệu, SECRET_KEY hoặc bất kỳ thứ gì nhạy cảm khác trong settings.py bởi vì dự án Django của tôi được lưu trữ trong Mercurial; Tôi có settings.py kéo tất cả những thứ đó vào từ một tệp bên ngoài mà chỉ người dùng của Django và quản trị viên máy chủ mới có thể truy cập được. Tôi sẽ để phần "làm thế nào" như một bài tập cho người đọc ... bởi vì tôi đã trình bày chi tiết một số vấn đề trong câu trả lời cho câu hỏi của người khác và tôi quá lười để tra cứu nó ngay bây giờ.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm đệ quy PHP để xóa tất cả các nút con gây ra stackoverflow

  2. Cách tách một cột kết quả thành nhiều cột

  3. Cách lưu trữ kinh độ và vĩ độ trong cơ sở dữ liệu. MySQL sẽ không đi xa hơn -99,9999999

  4. Ứng dụng đơn giản nhưng nặng, tiêu tốn nhiều tài nguyên. Làm thế nào để Tối ưu hóa?

  5. Cách xử lý phân mảnh cột ID auto_increment trong MySQL