一个基于键/值的json odm,有一个令人难忘的名字。

caroline的Python项目详细描述


卡罗琳

Build StatusCodacy BadgeCodacy BadgeCode style: blackPackaged with Poetry

一个键值json odm,具有一个令人难忘的名称。

卡罗琳是什么?

caroline是另一种存储json数据的方法。它包含ElasticSearch和Redis的后端,允许您在同一个项目中同时使用它们!包含在框中(强烈建议您使用)的是jsonschema支持。

为什么?

现有的选项对于我们所寻找的不是很有效,所以我们为内部使用编写了自己的选项,并决定开放源代码。该项目的目标是易于集成而无需高开销。

它是如何工作的?

开始的唯一需要做的事情就是from caroline import Prototype。然后您可以开始构建数据类:

fromcarolineimportPrototypeclassDog(Prototype):default={"breed":"","age":1,"name":""}schema={"type":"object","properties":{"breed":{"type":"string"},"age":{"type":"number"},"name":{"type":"string"}}}sam=Dog('sam')print(sam)# >>> {"breed": "", "age": 1, "name": ""}sam.update('name','Sam')# ORsam['name']='Sam'sam.update('age',5)sam.update('breed','mutt')sam.save()

当您使用id(如Dog('sam'))创建类的新实例时,这是保存特定记录的键。这意味着,如果使用该名称创建一个类,它将再次加载相同的记录:

fromexample_aboveimportDogx=Dog('sam')print(x)# >>> {'breed': 'mutt', 'age': 5, 'name': 'Sam'}

如果使用所选数据库中不存在的id创建类的实例,则它将使用在类中定义的defaultdict实例化该实例。

Caroline将自动处理自己的连接,但如果您有自定义连接,请随时通过您的型号将其传入:

classCat(Prototype):elasticsearch_conn=your_elasticsearch_connection# ORredis_conn=your_redis_connectiondefault={}

注意:您的模型上不能有多个连接!每个模型只能与一个数据库一起工作;也就是说,如果您愿意的话,可以将每个模型路由到不同的数据库,而caroline可以为您处理它。如果您不想传递每个模型的特定连接,我们不会责怪您;默认连接是elasticsearch,但是您可以通过将环境变量CAROLINE_DEFAULT_DB设置为“elasticsearch”或“redis”来更改它。您还可以直接导入caroline配置并手动将请求的数据库设置为默认值(caroline.config.default_db = "redis")。

目前还没有更改elasticsearch位置的方法,但是可以通过将redis地址格式化为url(例如redis://localhost:6379/0)来设置redis位置,如果将其设置为环境变量CAROLINE_REDIS_URL,caroline将获取该地址。

如果时间继续,你需要升级你的模型,我们有一个计划!只需修改模型(添加或删除新字段),然后按正常方式加载关键点。在数据库中检索到的对象调用“{{ CD8}}”,卡洛琳将强制您现有的数据进入新模型。这是一个破坏性的呼吁。

fromcarolineimportPrototypeclassDog(Prototype):default={"age":1,"name":"","sire":"","dam":""}db='redis'x=Dog('sam')print(x)# we get the last time we used the key `sam` for the prototype class `Dog`# >>> {'breed': 'mutt', 'age': 5, 'name': 'Sam'}# THIS CALL RESULTS IN THE DESTRUCTION OF DATAx.upgrade()print(x)# >>> {'age': 5, 'name': 'Sam', 'sire': '', 'dam': ''}x.save()

caroline还使您能够选择数据库根键名称;默认情况下,它将是您创建的类模型的名称。例如,如果您有一个名为dog的类,上面的记录id为'sam',那么db中的记录将具有::dog::sam键。您可以通过添加另一个参数来调整第一部分:db_key。除非你有充分的理由改变它,否则不要为此烦恼。

关于模式的说明:虽然我们提供了对jsonschema的支持(这是创建这个包的驱动力),但您不必使用它——如上面的示例所示,您不需要创建schema键。如果没有传入schema,则它不会对.save()执行验证步骤,否则,它会在每次调用.save()时根据架构验证数据。

最后,有时您只需要一个dict;我们的原型类在假装dict方面做得很好,但是如果您真的只需要数据,则调用.to_dict()并返回一个常规字典。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java连接usb到uart设备到安卓设备>3.1   可以强制Php中的web应用程序与Java中的桌面应用程序一起工作吗?   java为什么自定义系统类加载器不工作?   数组在Java中解析具有多个分隔符的字符串   PMD Java 8德米特定律   JavaSpringMVC表单验证不适用于嵌套的复杂类型   让Eclipse Java组织导入以使用Google checkstyle   java Appium:无法创建新会话   java如何在数组中声明新字段   java如何解决“无法初始化类org.apache.cassandra.config.DatabaseDescriptor”?   java AsyncTask创建socket   java向@CreatedBy添加更多信息   如何在ubuntu中运行包含大量jars依赖项的java文件   java如何使用<s:select>标记并在中休眠来填充下拉列表?   java获取错误:找不到符号变量“level”和“next_level_button”   javaweb应用中基于UI的ajax显示代码流   Java长到MySql   java JvisualVM:奇怪的应用程序行为   ubuntu将Java程序的输出结果保存到一个文件中