在运行时向对象添加属性,并保存到数据库
Posted
技术标签:
【中文标题】在运行时向对象添加属性,并保存到数据库【英文标题】:Adding properties to object at runtime, and saving to a database 【发布时间】:2013-05-11 17:46:28 【问题描述】:我有一组模型类定义,每个都有一些属性和方法。
每个新的模型类定义都映射到它自己的数据库表,这些属性构成了表列。然后可以将每个新创建的对象充分保存以备不时之需。
我的问题是,我怎样才能优雅地允许在运行时添加其他属性,并在不重新迁移数据库中的所有表的情况下保存它。
例如,假设我有一个“文章”对象,其中包含名称、创建日期和文章正文作为属性(最初),但在运行时,用户决定为特定文章添加概要作为属性,如何将新实体保存到数据库中?
我想我正在尝试(除其他外)模仿在 Drupal 中添加字段或在 Wordpress 中添加自定义字段。
由于在创建或更新表时必须指定每一列的数据类型,我能想到的唯一方法是创建一个以数组作为数据类型的列。这个解决方案感觉有点尴尬,只是想知道其他人是如何做到的。
非常感谢您的帮助。
【问题讨论】:
你为什么用 php 和 Django 来标记这个?到目前为止它实现了什么? 到目前为止是 php,但是我在使用其 Reflection API 时遇到了一些困难,因此考虑切换到 Python 和 Django 【参考方案1】:作为最低公分母,您可以将对象保存为一系列键值对,但这听起来既笨拙又缓慢。当您拥有包含对象等的对象时,我还可以设想噩梦。
或者,您可以在存储之前对它们进行序列化(也许是 xml 文档?)但这放弃了数据库级别的任何类型的结构,并且如果您希望根据特定列值查询数据库,事情就会变得复杂。
但如果我是你,我会阅读一些“休眠”实用程序,例如休眠(!)以了解它们如何持久化事物。这些实用程序已经在解决您的确切问题,并且您可以保证他们会对此进行大量思考。
如果你幸运的话,甚至可能有这样的实用程序,你可以开箱即用,无需了解细节。
【讨论】:
感谢您将我的鼻子指向正确的方向。尽管我正在按照您的建议深入研究休眠,但您有什么好的资源可以与我分享吗?非常感谢。 我不是这方面的专家,但我知道 Hibernate 是一个开源项目:http://www.hibernate.org/。快速浏览这里会显示大量文档以及源代码,即使您需要进入该级别以上是关于在运行时向对象添加属性,并保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章