【问题标题】:What is best practice to create a small database in python?在 python 中创建小型数据库的最佳实践是什么?
【发布时间】:2017-04-27 02:53:19
【问题描述】:

如果我想用 Python 创建一个小型数据库,最好的做法是什么?

例如,如果我想将 Cisco 的命令“sh ip route”的输出存储在数据库中,

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':{next hop: {outgoing interface: source}}李>
  3. 以列表为值的字典 {'1.1.1.1':[下一跳,出接口,来源]}
  4. 还有其他选择吗?

我觉得 SQL 会是最好的解决方案,但如果不是 SQL,还有什么选择?

【问题讨论】:

  • 在python中使用sqlite3模块docs.python.org/2/library/sqlite3.html
  • 当然!听起来不错。在 2 和 3 之间,哪种做法更好?
  • sqlite3中不能直接存储Python字典,所以需要将Python字典转成JSON字符串。
  • 如果你正在考虑nosql,MongoDB使用PyMongo连接Python:api.mongodb.com/python/current
  • 不,我的意思是如果我根本不使用 sqlite3 并在嵌套字典或以列表作为值的字典之间进行选择。在这种情况下,我必须创建一个仅在运行时可用的临时数据库。

标签: python database


【解决方案1】:

路由表的形式看起来更类似于 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()

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    相关资源
    最近更新 更多