SQLObject 底层的数据库变更

2 投票
3 回答
893 浏览
提问于 2025-04-11 19:26

我正在开始一个网页项目,可能用SQLite就足够了。我在它上面使用了SQLObject,但考虑到长远发展——如果这个项目需要处理更多的流量,我需要准备一个迁移计划。我的问题是:

  1. 从一个数据库(SQLite)迁移到另一个数据库(比如MySQL、Firebird或PostGre)在SQLObject中有多简单?
  2. SQLObject有没有提供一些工具来简化这样的迁移?是不是只需要把我定义的对象拿出来,然后调用createTable就行了?
  3. 如果我使用多个SQLite数据库呢?比如每个访客组一个数据库?SQLObject有没有处理这种情况的机制,如果有,应该怎么用?

谢谢,
肖恩

3 个回答

0

我不太明白这个问题。

SQLObject的文档列出了六种可用的连接方式。此外,数据库连接(或者说连接方式)是在一个连接字符串中指定的。把数据库连接从SQLite换成MySQL其实很简单。只需要修改连接字符串就可以了。

文档中列出了支持的不同连接方式。

2

你使用createTable()的成功与否,主要取决于你现有的表结构和数据类型。简单来说,就是SQLite和你选择的数据库之间的匹配程度,以及SQLObject如何处理你的数据类型。

最保险的做法可能是手动创建一个新的数据库。然后你需要处理数据迁移,这可能很简单,只需在相同的表定义上创建两个SQLObject数据库连接。

那为什么不直接从功能更全的数据库开始呢?

3

这个问题挺有意思的。一般来说,SQLite在网络应用中用处不大。虽然它在处理数据量方面表现还不错,但在同时处理多个请求时就很糟糕了。如果你打算同时发起几个请求,那就可能会遇到麻烦。

你在问题的第三部分提到的想法是使用多个SQLite数据库(比如每个用户组一个,甚至每个用户一个)。可惜的是,SQLite在这方面不会给你提供帮助。不过,这种做法是可行的。我知道的唯一一个这样做的项目是Divmod的Axiom。所以我建议你去看看这个项目。

当然,使用你提到的那些好的并发数据库(比如Firebird、PG等)会简单得多。

为了完整性:

1和2)这应该很简单,你实际上不需要写很多代码。我觉得SQLObject在这方面有点限制,所以我强烈推荐SQLAlchemy。这个工具灵活得多,如果我今天要开始一个新项目,我肯定会选择它而不是SQLObject。它不会把“对象”移动到任何地方。这里没有什么魔法,它只是会在数据库中转移表格的行。虽然你可以手动完成这些操作,但用这个工具可能会节省你一些时间。

撰写回答