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

时间:2019-06-16 06:09:07

标签: python python-3.x telegram telegram-bot python-telegram-bot

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

该代码注册用户但不进行交叉检查(用户可以注册多次),我如何制作一个好的约会数据库。我不知道从哪里开始,哪怕是很少的帮助也会得到帮助。

1 个答案:

答案 0 :(得分:0)

一些观察

因此,您可以从用户那里得到约会(一个接一个)并将其存储到表行中。

要将数据存储在数据库中,请使用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()

表架构为

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

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

问题

  

此功能允许我将变量存储在单列中,如何将下一个变量存储在下一列中?
  ...
  我从用户那里得到的文本将存储在一个列中,而下一个文本将存储在其下方。但我想像我们在php和sql中一样将文本连续存储

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

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

  

我想连续存储文本就像在php和sql中一样

下一步做什么

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

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

如果需要,您可以在评论部分提出更多问题。