【问题标题】:I am creating an inventory system in Python for my employer, should I store inventory information in an SQLite database? [closed]我正在用 Python 为我的雇主创建一个库存系统,我应该将库存信息存储在 SQLite 数据库中吗? [关闭]
【发布时间】:2018-12-19 21:33:03
【问题描述】:

我已经开始用 Python 为我的雇主创建一个库存系统。我的前端 GUI 基本完成,但对后端有疑问。

我应该如何存储这些信息?

该程序将位于一个可供多人同时访问的保管箱文件夹中。我是否应该使用 SQLite 数据库,并在执行“添加库存”等功能时,打开连接,执行更改,然后关闭连接?这是否允许多个用户同时打开库存?有没有更好的方法来处理这个问题?

库存物品不会很多。使用python对象和对象方法来存储和操作信息会更好吗?

【问题讨论】:

  • 如果您尝试进行类似数据库的操作,您可能应该使用数据库。否则,您如何设想使用 python 对象来跟踪库存变化?
  • 我认为如果有办法在关闭和重新打开应用程序时保持属性更改,那么创建具有“计数”、“价格”等属性的对象可能会起作用。
  • 有一些方法,例如 .csvpickle 文件,可用于在会话之间持久保存数据或 python 对象,但这真的取决于您的用例
  • 您是否阅读过有关 sqlite 和多个并发访问的警告?
  • 我没有,我只是看了看,似乎不会有问题,因为一次超过一个人的可能性很小(尽管存在)。即使有不止一个人,他们的更新也将是次要的,并且根据警告,将需要几毫秒才能完成。

标签: python sqlite class inventory-management


【解决方案1】:

您可以使用 Python 轻松操作 sqlite 数据库。

https://docs.python.org/3/library/sqlite3.html

import sqlite3 as sql

class SQLManiuplator:
  def __init__(self, fp=None):
    path = fp
    if not fp:
      path = "example.db"
    self.path = path

  def add_item_to_inventorytable(self, item):
    with sql.connect(self.path) as conn: # close automatically
        c = conn.cursor()
        # Use '?' substitution to sanitize inputs per sqlite3 docs
        c.execute('''
        INSERT INTO inventory VALUES (?)''', item)
        c.commit()

  # More CRUD functions

您可以使用此模式构建一个漂亮的 CRUD api,并将操作映射到您的 GUI。从设计的角度来看,然后由您决定您愿意向用户公开哪些操作。例如,我不认为您想让CREATE TABLE 可供用户使用,所以我没有包括在内。 (但这意味着您必须手动创建表并定义其中存在哪些列。)

您已经说过这将是一个非常轻量级的库存系统,但不言而喻,在企业规模上,这个解决方案是一个失败者。

【讨论】:

  • 谢谢!这很有帮助。如果你不介意,我还有一个问题要问你,使用 c.execute 方法,有没有办法接受可变数量的参数?我打算有多个表,有些表的列数不同。我知道在 javascript 中,您可以使用“参数”对象来检索和迭代可变数量的参数。如果可能,我想避免为每个表创建多个函数。
  • @BlorbieRandy 查看 python splat 运算符。在python中学习decorators让我学到了很多关于splat的知识
  • 不客气!如果回复有助于解决您的问题,您可以将其标记或标记为已回答@BlorbieRandy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2016-02-04
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多