在 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
- 您不能在 "next column" 中存储下一个约会,因为 SQLite 有一个模式,即每个 table 都有预定义的列数,有或没有类型和限制。由于约会数量未定义,因此您不能有未定义列数的 table。
- 此外,关系数据库(SQLite、MySQL 等)并非设计用于保存无模式数据(如您的情况)。
- 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 架构,并将约会存储在 行 中,因为对于这个简单的任务来说似乎没问题。如有必要,请为此数据库数据结构调整您的代码。
有问题可以在评论区提问
此函数允许我将变量存储在单个列中,如何将下一个变量存储在下一列中?
代码注册用户但不交叉检查(用户可以多次注册),我如何制作一个好的数据库来进行约会。我不知道从哪里开始,即使是一点点帮助也将不胜感激。
一些观察
因此,您从用户那里获得约会(一个接一个)并将它们存储到 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
- 您不能在 "next column" 中存储下一个约会,因为 SQLite 有一个模式,即每个 table 都有预定义的列数,有或没有类型和限制。由于约会数量未定义,因此您不能有未定义列数的 table。
- 此外,关系数据库(SQLite、MySQL 等)并非设计用于保存无模式数据(如您的情况)。
- 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 架构,并将约会存储在 行 中,因为对于这个简单的任务来说似乎没问题。如有必要,请为此数据库数据结构调整您的代码。
有问题可以在评论区提问