【问题标题】:creating good database for telegram bot in python在 python 中为电报机器人创建良好的数据库
【发布时间】:2019-06-16 06:09:07
【问题描述】:

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

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

【问题讨论】:

  • 这个函数允许我将变量存储在单列中。什么变量?什么栏目?下一个变量和下一列是什么?
  • 我从用户那里得到的文本存储在一个列中,下一个文本存储在它下面。但我想像在 php 和 sql 中那样将文本存储在一行中
  • db.get_itemsdb.add_item 函数有什么作用?
  • add_item() 获取项目的文本并将其插入到我们的数据库表中。 get_items() 从元组格式的单个(第一)列返回数据库中所有项目的列表。
  • @IvanVinogradov 我也用我现在尝试的代码更新了问题(现在制作)

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


【解决方案1】:

一些观察

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

要将数据存储在数据库中,请使用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 中所做的那样

下一步做什么

在我看来,您有以下选项可供选择:

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

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

【讨论】:

  • 在等待您对此的回复时,我尝试用令人愉悦的Please have a look here 制作一些东西。我完全明白你的意思,我不知道如何使用任何其他数据库。如果您能提供帮助,那对我非常有帮助,而且很有价值。@IvanVinogradov
  • 为什么不能使用当前数据库及其架构?
  • 我在制作逻辑时遇到问题
  • 详细描述
  • 我想询问您想要什么服务只为姓名预约,然后从自定义键盘询问 dake,该键盘应检查时间是否已经预订,并将这些详细信息保存在D B。你能指导我吗@IvanVinogradov
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 2018-02-27
  • 2020-10-28
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2021-05-21
相关资源
最近更新 更多