1

我正在用 python 为 Counter-Strike 创建一个游戏模组,基本上都完成了。唯一剩下的就是编写一个 REAL 数据库,我对 sqlite 没有任何经验,所以我需要很多帮助。

我有一个Player带有属性的类self.steamid,对于每个反恐精英玩家(从游戏引擎接收)来说都是唯一的,并且self.entity,它包含在玩家的“实体”中,并且Entity-class 有很多更多的属性,例如级别,名称和方法负载。而Entity是一个自制的Python类)。

实现数据库的最佳方法是什么,首先,如何将 Player 的实例与另一个 Entity 实例一起保存到数据库中,因为它是数据库的属性?

另外,每次他连接到游戏服务器时,我都需要获取用户数据(我有 player_connect 事件),那么我将如何接收数据呢?

我发现的所有教程都只教了保存字符串或整数,但没有教整个实例。我是否必须保存所有实例的每个属性(实体实例的属性很少,而且它们都有大量的属性......),还是有更快、更简单的方法?

此外,它将是一个本地保存的数据库,所以我不能真正使用除 sql 之外的任何其他语言。

4

2 回答 2

0

SQL 数据库通常只能保存基本数据类型。如果你想映射你的模型,你可以使用 SQLAlchemy,以便它们的属性自动映射到 SQL 类型——但是使用 SQLlite 需要大量的研究和反复试验。

我认为当你说“它必须是 SQL”时你并不完全正确 - 如果你正在运行 Python 代码,你可以保存你喜欢的任何格式。

然而,Python 允许您将您的实例数据序列化为一个字符串——该字符串可在数据库中持久保存。

因此,您可以在 SQL 中创建一个 varchar(65535) 字段,以及一个 ID 字段(例如,可以是您提到的玩家 ID 号),并将以下返回的值保存到它:

import pickle

value = pickle.dumps(my_instance)

检索值时,您执行相反的操作:

my_instance = pickle.loads(value)
于 2012-09-04T16:57:26.020 回答
0

你需要一个 ORM。要么你自己滚动(我从不建议),要么你使用已经存在的一个。可能 Python 中最流行的两个是 sqlalchemy,以及与 Django 捆绑的 ORM。

于 2012-09-04T17:00:44.970 回答