何处/如何在数据库中存储有关(SQLite3)数据库的应用程序定义属性?

时间:2017-05-13 13:18:29

标签: python database sqlite

所以我有一个或多个带有各种数据表的数据库。

我需要存储一些特定于数据库的属性。 例如。被抓网站的国家(该网站有多个国家)。

这样做的最佳方式是什么?我认为最好将属性保留在数据库中,但(SQLite3)是另一个表的唯一方法吗? (ID,Key,Value)但是值可能需要是字符串/文本,整数,浮点数/实数。为了解决这个问题,我只需将它们全部转换为字符串,例如json.dumps / loads 或者这有更好的方法吗?

由于

2 个答案:

答案 0 :(得分:2)

因此,听起来您希望您拥有与数据库相关联的词典,您可以存储有关应用程序如何与数据库交互的键值信息。 有很多方法可以做到这一点;我建议选择最适合您应用的那个。

首先,假设您知道要使用的键,一个简单的方法是创建一个最多只有一行的表:

create table properties( country_of_website varchar(2) not null, time_downloaded timestamp not null);

我没有添加id列。根据您的ORM模型,您可能需要一个。您需要确保该表永远不会有多行。这种方法很好,因为你依赖于数据库的输入。正如已经指出的那样,sqlite使用动态类型,但有一天你可能会使用另一个数据库。如果您拥有少量属性并且您知道它们提前了什么,这种方法很有效。

在光谱的另一端,您可以执行类似

的操作
create table properties(key varchar(20) primary key, value varchar(256));

你有一个表包含一个键和值的字符串表示。优点是它相当动态。缺点是您将使用属性的字符串表示形式。这对于s​​qlite来说并不是一个缺点,但是对于其他数据库,你可能会失去强类型的优势来检测编程错误。

第三种方法是每种类型都有一个表。

create table float_properties(key varchar(20) primary key, value float not null);

并且还创建了一个string_properties表等。由于动态类型的原因,我推荐使用sqlite这种方法。第三种方法是最复杂的,如果我需要强类型并且不能使用第一种方法,我只会使用它。

答案 1 :(得分:0)

SQLite使用dynamic typing,因此您只需将属性值直接存储在列中即可。