python原理图json/yaml数据库接口

BTEdb的Python项目详细描述


α,α,β,β,β,β,α,β,β,β,β
##
###########
btedb(比ethan的数据库好)是一个创建的项目,因为ethan认为他可以用python编写数据库,而我的数据库必须比他的数据库好 < BR>
它是一个类似mongodb的无模式数据库,可以序列化为json。它可以序列化为文件,也可以序列化为传递给它的对象。 < BR>
一个例子: < BR>
db=btedb.database("filename.json") < BR>
< BR>
MyClass类:
def seek(自寻道、位置、模式):
通过
定义截断(自):
返回false
定义初始化(自身):
self.data=""
定义写入(自,数据):
self.data=数据
def冲洗(自):
通过
def读(自):
返回self.data
定义关闭(自):
通过
myobject=myClass()
db=btedb.数据库(myobject) < BR>
启动数据库时根本不需要指定对象,但仍需要创建一个对象。例如: < BR>
db=btedb.database("filename.json") < BR>
执行的操作与: < BR>
db=btedb.database()
db.opendatabase("filename.json") < BR>
这允许您随时切换文件 < BR>
btedb还支持漂亮的打印。指定数据库要使用的任意空间数,例如: < BR>
db=btedb.database("filename.json",4) < BR>
< BR>
db=btedb.database()
db.opendatabase("filename.json",4) < BR>< BR>
您可以安全地关闭文件描述符并将数据库返回到刚刚创建的状态,如下所示: < BR>
数据库销毁() < BR>
创建表如下所示: < BR>
db.create("表名") < BR>
如果表存在,它将被截断 < BR>
如果表不存在,则以下大多数方法将引发TableDoesNotExistException < BR>
放下低音: < BR>
db.drop("表名") < BR>
像这样截断表: < BR>
db.truncate("表名") < BR>
转储整个数据库: < BR>
数据库转储() < BR>
或特定表格: < BR>
db.dump("表名") < BR>
检查是否存在这样的表: < BR>
db.tableexists("表名") < BR>
插入如下: < BR>
db.insert("表名",username="niles",uid=1000,favcolour=0xffffff) < BR>
与所有无模式数据库一样,您负责清理数据库的输入和输出。完全可以将该条目和{x=12,y=24,pointcolour="green"}存储在同一个表中。 < BR>
选择这样的数据: < BR>
db.select("表名",uid=1000) < BR>
这将选择uid为1000且最喜欢的颜色为白色的所有条目: < BR>
db.select("表名",uid=1000,favcolour=0xffffff) < BR>
这将选择所有最喜欢的颜色为白色且用户名中有E的条目,不区分大小写: < BR>
db.select("表名",favcolour=0xffffff,lambda x:x中的"e"["用户名"].lower()) < BR>
您可以使用lambda或预定义函数。例如: < BR>
导入urllib2
def checkuser(数据点):
值={"uid":数据点["uid"],"username":数据点["username"]}
postdata=urllib2.encode(值)
请求=urllib2.request("http://example.com/checkuser.php",postdata)
响应=请求。读取()
如果响应="用户接受":
返回真 其他:
返回false
db.select("表名",checkuser) < BR>
它将查询外部服务器以检查用户名和uid,以确定是否应选择每一行。请注意,这将产生大量的网络流量 < BR>
删除类似。下面将删除uid为1000的任何用户: < BR>
db.delete("表名",uid=1000) < BR>
这里也可以使用lambdas和函数。 < BR>
需要注意的是,第一个非关键字参数是表名。表名后面的非函数或lambda非关键字参数将引发typeerror < BR>
更新有点复杂。下面是一个例子 < BR>
db.update("表名",db.select("表名",favcolour=0xffffff),uid=12,username="test") < BR>
这与sql语句相同: < BR>
更新"表名"set`uid`=12,`username`=test','favcolour`=0xffffff; < BR>
可以在select语句中使用lambdas,但不能在update语句中使用。要实现类似的目标,可以执行以下操作: < BR>
对于db中的x,选择("表名",favcolour=0xffffff):
db.update("表名",[x],uid=x["uid"]+1) < BR>
这将增加每个用户最喜欢的白色uid。 < BR>
它也可以与转储方法相结合 < BR>
db.update("表名",db.dump("表名"),username="newusername") < BR>
这会将每个用户的用户名更改为"newusername" < BR>
保存保存点非常简单: < BR>
db.save("保存点名称") < BR>
返回到保存点: < BR>
db.revert("保存点名称") < BR>
保存特定表: < BR>
db.save("保存点名称","表名称") < BR>
从保存点恢复特定表: < BR>
db.revert("保存点名称","表名称") < BR>
删除保存点 < BR>
db.removesave("保存点名称") < BR>
如果只保存了几个表,则在尝试恢复整个保存时,仅恢复这些表。 < BR>
您可以使用以下方法手动检索或插入保存点: < BR>
db.getsave("保存点名称")
db.getsave()
db.putsave(数据,"保存点名称")
db.putsave(数据) < BR>
在大多数情况下,您不应该使用这些方法。如果出于某种原因,请不要混淆是使用保存点名称放置请求的保存,还是不使用保存点名称放置请求的保存。 < BR>
触发器由名称标识,名称可以是字符串、整数、浮点或其他一些数据类型。名称必须是唯一的,但是可能有无限的触发器。 < BR>
您可以添加如下触发器: < BR>
导入时间
def处理程序(db、datapoint、table、event):
print("在数据点"+str(数据点)"+"in table"+table"的事件"+event+"上调用的处理程序)
数据库保存(str(time.time()),表)
db.addtrigger("触发器名称","更新后","表名称",处理程序) < BR>
对"table name"表中的内容进行任何更新时,都会打印一条消息并创建一个新的保存点。请注意,这将为每个单独的数据点运行。 < BR>
您也可以使用lambda表达式。 < BR>
有效事件包括"插入前"、"插入后"、"删除前"、"删除后"、"更新前"和"更新后" < BR>
使用insert和delete,相同的数据点同时传递给before和after处理程序。使用update,新旧数据点分别传递给before和after处理程序。 < BR>
按如下方式删除: < BR>
数据库removetrigger("触发器名称") < BR>
一个事件可能有多个处理程序。 < BR>
事务是高效数据库所必需的。 < BR>
当不在事务中时,修改数据库的方法在返回之前将数据库写入磁盘。如果您没有很多请求,这是很好的,但是如果您要执行两个或多个连续修改数据的语句,您应该在事务中执行它们。 < BR>
开始这样的事务: < BR>
db.beginTransaction() < BR>
但是,这将创建一个名为"transaction"的保存点。若要在没有此选项的情况下开始交易,(您将无法还原交易),请执行以下操作:

数据库BeginTransaction(错误) < BR>
要提交事务并写入磁盘: < BR>
数据库提交事务() < BR>
如果选择进行保存,则可以还原事务: < BR>
数据库还原事务() < BR>
您始终可以使用布尔值"db.transaction progress"判断事务是否正在进行`` < BR>
其他较少使用的方法: < BR>
db.vacuum()强制写入磁盘
db.listsaves()列出保存点
db.listtables()猜测
db.listTriggers();自己解决
db.triggerexists(name)甚至读过这些 < BR>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将Java中的对象列表序列化为json   在同一Play Framework项目中同时使用Ebean和JPA的java   oop如何在整个Java项目中共享API密钥   java ADT Eclipse SDK故障未找到DDM   扫描程序中变量的递归Java输入值未应用于方法中的变量   java将空格转换为命令行类型的空格   JavaSpring,如何决定客户机应该使用哪个服务?   java致命异常:main(Android标准)   java编译错误是因为类型检查还是三元运算符?   java Sikuli+Webdriver:getting error x.png看起来像一个文件,但在磁盘上找不到。假设是文本   java选择位置。。。。ms sql 2005中需要电气状态   由于OSGi捆绑包依赖性问题,java无法启动RCP应用程序   json java gson fromjson返回非泛型的null   如何将google api访问令牌从java服务器传递到gapi javascript客户端?   java在已排序的LinkedList中添加元素   java ForkJoinPool为什么程序抛出OutOfMemoryError?   java SQUARE无法解析为Processing/Eclipse中的变量   java如何为Sun App Server 8.2设置JNDI