数据库不可知查询系统
link.dbrequest的Python项目详细描述
link.dbrequest是一个与数据库无关的查询系统。
有关详细信息,请参见documentation。
安装
pip install link.dbrequest
功能
- database agnostic
- lazy query resolving
- cached queries
- queries are unique
示例
获取后端:
fromlink.middleware.coreimportMiddleware# Will open a QueryManager using a MongoDB backendmanager=Middleware.get_middleware_by_uri('query+mongo://localhost:27107/mydatabase/mycollection')# Will open a QueryManager using a SQL backendmanager=Middleware.get_middleware_by_uri('query+sql://localhost:5432/mydatabase/mytable')
后端操作:
fromlink.dbrequest.expressionimportE,Ffromlink.dbrequest.assignmentimportAfromlink.dbrequest.comparisonimportCquery=manager.all()# get an iterable over all elementsmanager.create(A('foo','bar'))# put document {'foo': 'bar'} into databasedoc=manager.get(C('foo')!='bar')# get single element, or None
查询操作:
docs=list(query)# iterate over query to execute the requestdocs=list(query)# use cache when iterating again# create a new query from the first oneq2=query.filter(C('foo')=='bar')assertqueryisnotq2# exclude documents without a field named "bar"q3=q2.exclude(~C('bar'))# filter documents "weight > 5" and "prop1 < prop2 * 5"q4=q3.filter((C('weight')>5)&(C('prop1')<(E('prop2')*5)))# set "prop3 = prop1 + prop2" on q2 resultdocs=q2.update(A('prop3',E('prop1')+E('prop2')))# delete documentsq3.delete()
文档操作:
# save/delete a single documentdoc.save()doc.delete()