Python sqlite3,使用其他实例保存类的实例作为其属性?

时间:2012-09-04 14:47:26

标签: python database sqlite instance

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

我有一个Player类,其属性为self.steamid,对于每个Counter-Strike播放器(从游戏引擎接收)都是唯一的,self.entity包含在“实体”中“对于玩家,Entity - 类有很多很多属性,比如级别,名称和方法加载。而Entity是一个自制的Python类。)

实现数据库的最佳方法是什么,首先,如何将Player的实例与其他Entity实例一起保存到数据库中,是否有力?

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

我发现的所有教程都只讲授了保存字符串或整数,但没有关于整个实例的内容。我是否必须在所有实例上保存每个属性(实体实例具有更多实例,因为它的属性,并且所有实例都具有大量属性......),还是有更快,更简单的方法?

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

2 个答案:

答案 0 :(得分:0)

SQL数据库通常只能包含基本数据类型。如果要映射模型以使它们的属性自动映射到SQL类型,则可以使用SQLAlchemy - 但是,您需要使用SQLlite进行大量的研究和反复试验。

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

但是,Python允许您将实例数据序列化为字符串 - 该字符串可在数据库中保留。

因此,您可以在SQL中创建一个varchar(65535)字段,以及一个ID字段(例如,您可能是您提到的播放器ID号),并将其返回的值保留为:

import pickle

value = pickle.dumps(my_instance)

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

my_instance = pickle.loads(value)

答案 1 :(得分:0)

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