2015-06-18 77 views
2

我有一個名爲'flows_db'的數據庫,它維護2個表'ingress_flows'和'egress_flows'。我做了兩個表的sqldump,所以我可以在家用電腦上使用這些數據。所以我使用轉儲文件重新創建這臺計算機上的表,我可以看到數據在那裏,因爲select COUNT(*) from ingress_flows;顯示有大約2000個條目。Django - 數據庫數據沒有在應用程序中顯示?

然後我使用python manage.py inspectdb從表中創建模型。爲了測試它的工作,我就先含表中的所有條目的對象:

views.py

ingress_all = IngressFlows.objects.all() 
context = { 
      'ingress_all': ingress_all, 
      } 
return render(request, 'visualise/index.html', context)  

index.html

{% if ingress_all %} 
    {% for flow in ingress_all %} 
     <script> 
      console.log("{{ flow.protocol }}"); 
     </script> 
    {% endfor %} 
{% else %} 
    <p>No data is available.</p> 
{% endif %} 

但我看到的是No data is available.。因此,要Django的看來,我的數據庫是空的,即使我用它包含的所有數據在原始數據庫INSERT語句轉儲文件:

INSERT INTO `ingress_flows` VALUES (1434506151,1434506151,'UDP',48,'ff:ff:ff:ff:ff:ff','10.30.150.100','10.30.191.255',137,137,1024,102400),... 

python manage.py shell

>>> from visualise.models import IngressFlows 
>>> IngressFlows.objects.all() 
[] 
>>> 

但我可以手動插入的對象:

>>> t = IngressFlows(time_start=1434506151,time_end=1434506151,protocol='UDP',inf_in=48,mac_dst='ff:ff:ff:ff:ff:ff',ip_src='10.30.150.100',ip_dst='10.30.191.255',port_src=137,port_dst=137,packets_in=1024,bytes_in=102400) 
>>> t.save() 
>>> IngressFlows.objects.all() 
[<IngressFlows: 1434506151, 1434506151, UDP, 48:ff:ff:ff:ff:ff:ff:10.30.150.100:10.30.191.255, 137:137, 1024, 102400>] 
>>> 

是否Django的維護自己的數據庫,而不是使用系統上原來的MySQL數據庫?如果是這樣,這是如何適用的,因爲它沒有使用其他應用程序正在更新的系統級數據庫? Django如何看待這些變化:

謝謝。

settings.py

DATABASES = { 
    'default': { 
     'ENGINE': 'mysql.connector.django', 
     'NAME': 'flows_db', 
     'USER': 'root', 
     'PASSWORD': 'dbroot', 
     'OPTIONS': { 
      'autocommit': True, 
     },   
    } 
} 
+0

你使用了哪個數據庫?你有沒有在Django設置中設置你的數據庫配置?如果不是,Django使用Sqlite作爲默認值。 –

+0

我正在使用MySQL數據庫。我已經在上面添加了我的'settings.py'配置。謝謝。 – BelegNeurion

+0

你的機器上有更多的1數據庫服務器嗎?當你從Django shell添加行時,是否顯示在'select COUNT(*)from ingress_flows;'? –

回答

2

高興的是,你發現了問題。您需要爲您的Django模型設置數據庫名稱。 https://docs.djangoproject.com/en/1.8/ref/models/options/#db-table

class IngressFlow(models.Model): 
    class Meta: 
     db_table = 'ingress_flow' 
+0

感謝您的幫助。我說: '類元: 管理=假 db_table = 'ingress_flow' app_label = ''' 但是當我運行'蟒蛇manage.py makemigrations visualise'它仍試圖創建表'visualise_ingressflow'。 – BelegNeurion

+0

嘗試刪除app_label –

+0

是的工作感謝。我認爲'app_label'意味着表格名稱沒有任何東西,但顯然不是。 – BelegNeurion

相關問題