简介

pyorient是orientdb的python库

该库提供两种访问orientdb的方式:1、client 的方式

2、ogm 的方式(类似于ORM)

由于OGM 封装了client,且由于OGM 易于理解,操作简单,所以,这里主要介绍OGM。

创建/连接数据库

导入OGM 所需模块

from pyorient.ogm import Graph, Config

实例化 graph

config = Config.from_url('/localhost/test','root','root')
graph = Graph(config,'admin','admin')

 :

  • config 中的两个 root 分别为orientdb 实例的用户名和密码。类似于如下命令

orientdb > connect remote:localhost root root

graph 中的两个 admin 即想要连接的数据库的用户名和密码

  • 由于Graph() 会调用open 方法,所以,如果数据库中没有将要连接的数据库,那么就会创建一个新的,相应的数据库。

操作数据库

映射

和ORM类似,OGM会将 python 代码中的 class 映射到orientdb中的class。相当于关系型数据库中的表;python中class的属性即为orientd中class的property。即相当于关系型数据库中表的字段/列

想要将python中的class 映射到orientdb 中的class,需要将python中的class进行注册。

代码如下:

from pyorient.ogm.declarative import declarative_node, declarative_relationship

Node = declarative_node()
Relationship = declarative_relationship()

class Person(Node):
    pass

class Likes(Relationship):
    pass

graph.create_all(Node.registry)
graph.create_all(Relationship.registry)

  • 每一次调用declarative_node( ) 和 declarative_relationship( ) 都会生成相应的注册表。其实Node和Relationship是两个基类。
  • create_all( ) 命令就会在orientdb中创建相应的class,如果该class已经存在,那么就会更新该class。

Boker (代理)

OGM 拥有多层映射。

上面提到的python class 到 orientdb class 是一层映射。另一层映射是python class 的object(对象) 和orientdb中具体的 vertex 和 edge 之间的映射。Boker 即工作在这一层。该层映射成功后,会自动为每一个class 创建个一个boker对象。需要注意的是vertex类需要有element_plural 属性,relationship类需要有 label 属性。

代码如下:

class Foo(Node):
    element_plural = 'foos'
    name = String()
class Friend(Relationship):
    label = 'friends'
graph.include(Node.registry)   
graph.foos.create(name='Bar')
Foo.objects.create(name='Baz')

find_bar = graph.foos.query(name='Bar')

  • graph.foos 和Foo.objects 都是一样的,都是boker对象。
  • Relationship 的子类,在orientdb中 是用 label 来命名类名的。如 Friend 类在数据库中的类名为friends
  • query() 反回的是一个查询集对象。

命令

inE()  outE() bothE()

返回进/出/进出自一个顶点或者类的 边的对象

in_() out() both()

返回 进/出/进出 自一个边的或者类的 顶点的对象。

get_vertex()  get_edge()  get_element()

获取 顶点/边/顶点或者边

element 包括顶点和边两种对象。

create_class()  create_vertex() create_edge() drop_class()

创建 顶点或边/顶点/边 ; 删除类

open()   drop()

打开/关闭一个数据库

 : 调用open( )时,如果该数据库不存在,则自动创建。

调用drop( ) 时,需要有一个已经打开的数据库。

query()

返回一个query对象。具有all count group_by order_by filter 等方法,可以对查询结果进行处理。

update()   clear_registry()

更新python中orientdb对象的元素注册表 /清除元素注册表

字段类型

在OGM中,python类的属性就是orientdb 的property,也就是相当于关系型数据库中的字段/列。在pyorient中,字段类型有 String Boolean Float Date 等类型。这些字段又有如下属性。

name 会覆盖掉 “=” 前面命名的属性名。

nullable 允许为空

readonly 只读

default 默认值

indexed 是否为索引值

unique 是否唯一,如果为真,那么会创建相应的索引。

mandatory 是否强制有值。如果没有设置可以为空,那么默认设定为强制有值。

pyorient的更多相关文章

随机推荐

  1. UOJ 188 【UR #13】Sanrd——min_25筛

    题目:http://uoj.ac/problem/188 令 \( s(n,j)=\sum\limits_{i=1}^{n}[min_i>=p_j]f(j) \) ,其中 \( min_i \) ...

  2. x86 openwrt虚拟路由代理上网

    一.代理服务器设置 1.下载代理软件CCProxy 6.8 Build 2.设置如下 二.x86 路由设置 1.在/etc目录下编辑profile http_proxy= https_proxy= f ...

  3. Android免费短信验证

    转载请注明住处:http://blog.csdn.net/crazy1235/article/details/41912003 介绍 短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息 ...

  4. bzoj2765 铁人双项比赛

    Description 铁人双项比赛是吉林教育学院的一项传统体育项目.该项目比赛由长跑和骑自行车组成,参赛选手必须先完成k公里的长跑,然后完成r公里的骑车,才能到达终点.每个参赛选手所擅长的项目不同, ...

  5. js阻止默认事件、拖拽等等

    1.自定义右键菜单: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> &l ...

  6. [转]NSIS:判断D盘存在与否确定安装路径

    转载自:http://www.flighty.cn/html/bushu/20140704_239.html   现在我们想实现这样的功能: 如果目标机器存在D盘,那么就安装程序到D盘,否则安装在系统 ...

  7. JAVA多线程创建与退出过程

    Java多个线程,什么时候被创建,什么时候退出? java程序的入口是什么? java主线程main结束后,是否程序就结束了?C中的(windows,linux)main函数执行完,整个进程结束,其子 ...

  8. jmeter+maven 的简单使用 记录(Windows环境)

    1.手动创建maven工程目录结构,maven对目录结构要求比较严格(pom.xml文件一定要放在根目录下) Maven --src --main --test --jmeter --resource ...

  9. Java基本类型与运算

    问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.4基本类型与运算 1.Java提供了哪些基本数据类型? Java一共提高了八种原始的数据类型:byte.shor ...

  10. leetcode217

    public class Solution { public bool ContainsDuplicate(int[] nums) { var list = nums.Distinct(); if ( ...