所以,我在telegram上创建了一个小游戏bot。这个机器人只包含一个钓鱼游戏,它已经在运行了。我想如果用户钓鱼并得到一条鱼,鱼将存储在数据库中。所以用户可以在钓鱼的时候看到他钓到了什么。这需要SQL吗?
我没有尝试过任何东西,因为我不明白如何在python中存储数据。如果有相关的教程,请在评论中分享。谢谢你
可以使用任何东西来存储用户数据,包括文本文件。
存储数据的最简单方法是使用内置的json
模块将字典序列化为JSON:
DATABASE = 'database.json' # (name or extension don't actually matter)
import json
# loading
with open(DATABASE, 'r', encoding='utf-8') as fd:
user_data = json.load(fd)
user_data[1234] = 5 # pretend user 1234 scored 5 points
# saving
with open(DATABASE, 'w', encoding='utf-8') as fd:
json.dump(user_data, fd)
这只支持简单的数据类型。如果你需要存储自定义类,只要你不升级Python版本,你可以使用内置的pickle
模块:
DATABASE = 'database.pickle' # (name or extension don't actually matter)
import pickle
# loading
with open(DATABASE, 'rb') as fd:
user_data = pickle.load(fd)
user_data[1234] = 5 # pretend user 1234 scored 5 points
# saving
with open(DATABASE, 'wb') as fd:
pickle.dump(user_data, fd)
这是不是一个好主意取决于你期望你的机器人有多少用户。即使是100个,这些方法也可以很好地工作。如果是数千个,也许您可以为每个用户使用单独的文件,仍然可以。如果它不止于此,那么是的,使用任何数据库,包括内置的sqlite3
模块,将是一个更好的主意。有许多模块用于不同的数据库引擎,但通常使用SQLite就足够了(也有一些库使使用SQLite更容易)。
Telethon本身使用sqlite3
模块来存储授权密钥,以及它所看到的用户的缓存。但是,不建议根据自己的需要重用相同的文件。如果您选择使用sqlite3
,最好创建您自己的数据库文件。
使用文本文件作为数据库是一个糟糕的主意,使用SQL