python - 将聊天记录存储在关系数据库中

标签 python sql database sqlite database-design

我正在编写一个聊天机器人,它使用过去的对话来生成其响应。目前,我使用文本文件来存储所有数据,但我想使用数据库,以便机器人的多个实例可以同时使用它。

我应该如何构建这个数据库?

我的第一个想法是保留一个像 create table Sessions (startTime INT,ip INT, botVersion REAL, length INT, tableName TEXT) 这样的主表。然后对于每次对话我 create table <generated name>(timestamp INT, message TEXT)包含该对话期间发送或接收的所有消息。对话结束后,我将新表的名称插入 Sessions(tableName) 。以这种方式以编程方式创建表可以吗?我这么问是因为大多数 SQL 教程似乎都建议在程序初始化时创建表。

另一种方法是拥有一个巨大的 create table Messages(id INT, message TEXT)表存储发送或接收的每条消息。对话结束后,我可以将新条目添加到 Sessions其中包括id在该对话期间使用,以便我可以查找在某个对话期间发送的所有消息。我想这样做的一个优点是我不需要有数百或数千张 table 。

我计划使用 SQLite,尽管它的并发性较低,因为机器人的每个实例在生成响应之前可能会进行数千次读取(这将导致一次写入)。不过,如果其他关系数据库更适合此任务,请发表评论。

注意:关于在数据库中存储聊天日志还有其他问题,但我专门寻找它应该如何构建以及对上述想法的反馈。

最佳答案

不要为每个对话使用不同的表。相反,将“对话”列添加到您的单个表中。

关于python - 将聊天记录存储在关系数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430856/

相关文章:

python - 是否可以向 QCheckBox 添加 onclick 监听器?

sql - Azure SQL 中的 DTU 突然激增

php - PHP代码执行没有错误,插入操作成功,但数据不存在

sql-server - 对大型生产数据库进行架构更改的最佳实践

MySQL:当 FK 启用删除级联时,截断 `myTable` 时出错

Python PIL 如何将 1 位深度图像转换为 RGBA?

Python 3.x 移动范围

python - 不使用 bash 时如何正确激活 Anaconda 环境?

mysql - SQL 透视和计算存储为字符串的日期之间的差异 - MySQL

java - 这个 Java JDBC 程序有什么问题?