Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlite3,将一个类的实例与另一个实例保存为';s属性?_Python_Database_Sqlite_Instance - Fatal编程技术网

Python sqlite3,将一个类的实例与另一个实例保存为';s属性?

Python sqlite3,将一个类的实例与另一个实例保存为';s属性?,python,database,sqlite,instance,Python,Database,Sqlite,Instance,我正在用python为反击创建一个游戏模块,基本上都完成了。唯一剩下的就是编写一个真正的数据库,而我对sqlite没有任何经验,所以我需要很多帮助 我有一个属性为self.steamid的Player类,它对于每个反击玩家(从游戏引擎接收)都是唯一的,self.entity,它保存在玩家的“entity”中,entity-类有很多更多的属性,比如级别、名称和方法负载。实体是一个自制的Python类) 实现数据库的最佳方法是什么?首先,我如何将Player实例与实体的其他实例一起作为其属性保存到数

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

我有一个属性为
self.steamid
Player
类,它对于每个反击玩家(从游戏引擎接收)都是唯一的,
self.entity
,它保存在玩家的“entity”中,
entity
-类有很多更多的属性,比如级别、名称和方法负载。实体是一个自制的Python类)

实现数据库的最佳方法是什么?首先,我如何将Player实例与实体的其他实例一起作为其属性保存到数据库中,并将其强大地保存到数据库中

此外,每次用户连接到游戏服务器时,我都需要获取该用户的数据(我有玩家连接事件),那么我将如何接收数据

我找到的所有教程都只教保存字符串或整数,而没有教保存整个实例。我是否必须保存所有实例上的每个属性(实体实例的属性比实体实例多几个实例,并且所有实例都有大量属性…),或者是否有更快、更简单的方法


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

sql数据库通常只能保存基本数据类型。如果您想映射模型,使其属性自动映射到SQL类型,那么您可以使用SQLAlchemy,但这需要您进行大量的研究,并在使用SQLlite时反复尝试

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

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

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

import pickle

value = pickle.dumps(my_instance)
检索值时,执行相反的操作:

my_instance = pickle.loads(value)

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

您想在这里使用。这将导致OP编写自己的ORM。我不知道它是否可以称为“ORM”-但我不会说它不应该。但是,如果他真的编写了此功能,它仍然适用于他的用例,并且比现有的ORM使用起来要简单一个数量级。它提供了与ORM相同的功能,我必须说,我从未发现维护自己的代码比使用简单的库更简单。谢谢,我想等我上了hollidays,我就要开始学习炼金术了。该死的,我真希望能用sqlite3完成,那会很容易。但这是没办法的,谢谢你(还有其他人)的回答。