我将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", "")
是否存在并不重要,如果它存在,整个事情都会被覆盖。
我如何解决这种危险的默认行为?我想防止生产中出现失误的可能性。
答案 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