2009-08-21 63 views
1

是否可以編寫Django應用程序,例如用於內部/個人用於現有數據庫,而不需要在開始項目時安裝通常安裝的Djangos自己的表的「開銷」?我想通過模型使用現有的表格,但沒有其他所有在普通網頁上確實有用的東西。Django沒有額外的表?

原因是建立小型個人檢查/管理工具,而不會侵入傳統數據庫。

回答

1

定義數據庫表的最明顯的應用程序是django.contrib.auth,它在數據庫中實現了自己的auth後端。如果你的應用被防火牆阻擋,並且你信任所有可以訪問它的人,你大概可以跳過一起認證。否則,您希望使用現有基礎架構創建自己的身份驗證機制,您很可能需要使用另一個後端。如果您的網絡服務器設置爲REMOTE_USER,則可以使用​​,並且應該關閉並運行。否則,你將不得不實施你自己的引用其他認證來源。

從那裏你只需要設置你的模型使用現有的數據庫表,而不是讓他們自己做。你可以在這個非常精細的控制,例如

class MyModel(django.db.Model): 
    MyTextField = django.db.TextField(db_column="mytextfield", primary_key=True) 

    class Meta: 
     db_table = "my_table" 

這樣你可以指定精確的表,並從每個模型的每個字段應代表列。請注意,您可以將主鍵設置爲非整數類型。 django的ORM的侷限性在於,每個模型必須只有一個主鍵。所以如果你的表沒有主鍵,可以添加一個,或者你必須在沒有django的ORM的幫助下相處。

此外,由於您正在綁定現有的數據集,可能與其他應用程序有關,因此您可能不想使用./manage.py syncdb,因爲它可能會執行一些不需要的操作。

+0

非常感謝,那正是我期待的答案! :-) – 2009-08-21 18:55:23

3

Django本身不安裝任何表。它帶有一些預製應用程序,它們安裝表格,但是通過從INSTALLED_APPS設置中刪除它們可以輕鬆禁用這些應用程序。

+0

我知道,這很容易從課程的名稱被發現。我的意思是沒有他們我能走多遠? – 2009-08-21 18:18:31

+0

那麼,你將無法使用任何需要它們的應用程序。例如,如果您不需要用戶和權限表,那麼您將無法驗證Django用戶。 – 2009-08-21 18:46:29

0

不要安裝任何Django的內置應用程序,也不要在您的應用程序中使用任何models.py。您的數據庫將包含零表格。

您不會有用戶,網站或會話 - 那些是使用數據庫的Django功能。

AFAIK你應該仍然有一個SQLite數據庫。我認爲Django的某些部分假設你有一個數據庫連接,它可能會嘗試建立這個連接。

這是一個簡單的嘗試。

0

只是在您的項目settings.py文件(在項目的開始,在運行syncdb之前)中INSTALLED_APPS元組的應用程序字符串django

2

你也可以添加一個額外的數據庫(它設置爲默認值)保持額外的開銷Django的東西在:

DATABASES = { 
    'default': { 
      'ENGINE' : 'django.db.backends.sqlite', 
      'NAME'  : 'djangoOverhead', 
      'USER'  : '', 
      'PASSWORD' : '', 
      'HOST'  : 'localhost' }, 
    'legacyAppTables': { 
      'ENGINE' : 'django.db.backends.mysql', 
      'NAME'  : 'legacyAppTables', 
      'USER'  : '', 
      'PASSWORD' : '', 
      'HOST'  : 'someRemoteHost' }, }