2017-04-27 106 views
2

如果我想用Python創建一個小型數據庫,那麼最好的做法是什麼?在python中創建一個小型數據庫的最佳做法是什麼?

舉例來說,如果我想存儲從思科的命令在數據庫中 「SH IP路由」 輸出,

O  1.1.1.1 [110/2] via 10.0.0.1, 00:00:23, FastEthernet0/0 

存儲這些值:

1.1.1.1 - >下一跳,出接口源(如O,C,S)

  1. 使用PostgreSQL,mySQL的
  2. 嵌套的字典是這樣{ '1.1.1.1':{下一跳:{出接口}}
  3. 與列表作爲值 { '1.1.1.1' 的字典:[下一跳,出接口,源]}
  4. 還有其他選擇嗎?

我覺得SQL是最好的解決方案,但如果不是SQL,那又是什麼選擇?

+1

只需在python中使用sqlite3模塊https://docs.python.org/2/library/sqlite3.html – sisanared

+0

當然!聽起來不錯。 2到3之間,哪種練習更好? – monica

+0

您不能直接在sqlite3中存儲Python字典,因此您需要將您的Python字典轉換爲JSON字符串。 – sisanared

回答

2

路由表看起來有一個更類似於像Postgres或MySQL這樣的RDBMS中的關係表的文檔。

在這種情況下,我寧願使用面向文檔的數據庫。關於使用哪個數據庫取決於您的部署方案和應用程序體系結構。

如果您的目標是可以通過網絡訪問的數據庫服務器,那麼Mongo是一個非常好的選擇。如果你打算選擇一個只能在本地訪問數據的單節點應用程序,那麼你可以看看TinyDB。

隨着TinyDB你的代碼看起來像:

from tinydb import TinyDB, Query 

db = TinyDB('/path/to/db.json') 
db.insert({ 'Destination': '1.1.1.1', 
      'NextHop': '10.0.0.1', 
      'A': '*', 
      'P': 'B', 
      'Prf': 170', 
      .... 
      }) 

最後找個別路線爲:

route = Query() 
    db.search(route.Destination == '1.1.1.1') 
    # [{'Destination': '1.1.1.1','NextHop': '10.0.0.1','A': '*',...}] 

或讓所有的人在一次:

db.all() 

希望能幫助到你!

相關問題