如何防止意外覆盖现有数据库?

时间:2015-10-15 13:51:42

标签: basex

我将BaseX添加到现有的Web应用程序中,并且当前正在编写代码以将数据导入其中。 documentation非常清楚

  

现有数据库将被覆盖。

发现这种行为令人头疼危险,我尝试了它,希望文档是错误的,但不幸的是我的测试证实了它。例如,使用function stringify(object){ var Prototype = window.Prototype if (Prototype && Prototype.Version < '1.7' && Array.prototype.toJSON && Object.toJSON){ return Object.toJSON(object) } return JSON.stringify(object) } 我可以这样做:

basexclient

我还可以使用Python client复制此行为,这就是我实际用于我的应用程序的内容。将我的代码简化为基本要素:

> create db test
Database 'test' created in 12.03 ms.
> create db test
Database 'test' created in 32.43 ms.
> 

session = BaseXClient.Session("127.0.0.1", 1984, "admin", "admin") session.create("test", "") 是否存在并不重要,如果它存在,整个事情都会被覆盖。

我如何解决这种危险的默认行为?我想防止生产中出现失误的可能性。

1 个答案:

答案 0 :(得分:1)

您可以在创建数据库之前发出list command。例如,如果数据库不存在,则使用命令行客户端:

test

如果数据库存在:

> list foo
Database 'foo' was not found.

这是一个空的数据库,因此它不显示任何内容,但至少您没有收到错误消息。当您使用客户端时,您必须检查它是否出错。使用Python客户端,您可以:

> list test
Input Path  Type  Content-Type  Size
------------------------------------

如果服务器引发错误,客户端会引发def exists(session, db): try: session.execute("list " + db) except IOError as ex: if ex.message == "Database '{0}' was not found.".format(db): return False raise return True ,这是报告问题的一种非常通用的方法。所以你必须测试错误信息以弄清楚发生了什么。如果错误消息不是与我们的测试有关的错误消息,我们再加注。这样我们就不会吞下由无关问题引起的异常。

使用该功能,您可以:

IOError