在 python 中为电报机器人创建良好的数据库

creating good database for telegram bot in python

此函数允许我将变量存储在单个列中,如何将下一个变量存储在下一列中?

代码注册用户但不交叉检查(用户可以多次注册),我如何制作一个好的数据库来进行约会。我不知道从哪里开始,即使是一点点帮助也将不胜感激。

一些观察

因此,您从用户那里获得约会(一个接一个)并将它们存储到 table 行。

要将数据存储在数据库中,您可以使用 add_item() 方法:

def add_item(self, item_text, owner):
    stmt = "INSERT INTO items (description, owner) VALUES (?, ?)"
    args = (item_text, owner)
    self.conn.execute(stmt, args)
    self.conn.commit()

table 架构是

CREATE TABLE IF NOT EXISTS items (description text, owner text)

根据第 self.conn = sqlite3.connect(dbname) 行,您使用的是 SQLite 数据库。

问题

this function allow me to store variable in single column, how can i store next variable in next column?
...
the text i get from the user it gets stored in one column and the next text is stored below it. but i want to store the text in a row like we do in php and sql

  1. 您不能在 "next column" 中存储下一个约会,因为 SQLite 有一个模式,即每个 table 都有预定义的列数,有或没有类型和限制。由于约会数量未定义,因此您不能有未定义列数的 table。
  2. 此外,关系数据库(SQLite、MySQL 等)并非设计用于保存无模式数据(如您的情况)。
  3. SQLite 中的每一行都应该代表一条记录/class 的一个实例/一个实体。这就是每次调用 add_item() 时都会创建新行的原因。这就是它的工作方式。因此,当您想要列出用户的所有约会时,您会收到一组行,而不是单个行,其中 N 约会存储在单独的列中。

顺便说一句,我不明白你的意思:

i want to store the text in a row like we do in php and sql

下一步做什么

我认为您有以下选项可供选择:

  • 切换到 NoSQL 数据库,例如 MongoDB 或 Redis。大多数 NoSQL 数据库没有模式,您可以在其中插入任意结构的数据,并且可以本地存储 list 个对象。您可以在 MongoDB 中使用单个 JSON 文档来表示用户及其约会,或者在 Redis 中使用 list 用户 chat_id 键的约会。
  • 如果您希望继续使用关系数据库,您可以切换到支持 list 作为列类型的数据库。 SQLite不支持这种数据类型,但是Postgres has。 SQLite之所以没有这个特性是因为它设计的很简单table(一个数据库=一个文件,但也可以完全存储在RAM中)
  • 保留当前数据库和 table 架构,并将约会存储在 中,因为对于这个简单的任务来说似乎没问题。如有必要,请为此数据库数据结构调整您的代码。

有问题可以在评论区提问