我想知道有一个ORM与图数据库(fe Neo4j)的解决方案(或需要).我跟踪关系(A与B相关,它与A通过C等相关,从而构建一个大图)实体(包括那些实体的附加属性)并需要将它们存储在DB中,我认为图形数据库完全适合这项任务.
现在,对于类似sql的数据库,我使用sqlalchemyśORM来存储我的对象,特别是因为我可以从数据库中检索对象并以pythonic样式使用它们(使用它们的方法等).
Neo4j或其他Graph-DB是否有任何对象映射解决方案,以便我可以在Graph-DB中存储和检索python对象并轻松使用它们?
或者你会编写一些函数或适配器,如python sqlite文档(http://docs.python.org/library/sqlite3.html#letting-your-object-adapt-itself)来检索和存储对象?
例如,这是PostgreSQL中的产品表,其状态为枚举:
create type product_status as enum ('InStock', 'OutOfStock');
create table product (
pid int primary key default nextval('product_pid_seq'),
sku text not null unique,
name text not null,
description text not null,
quantity int not null,
cost numeric(10,2) not null,
price numeric(10,2) not null,
weight numeric(10,2),
status product_status not null
);
Run Code Online (Sandbox Code Playgroud)
插入产品的典型Clojure代码是:
(def prod-12345 {:sku "12345"
:name "My Product"
:description "yada yada yada"
:quantity 100
:cost 42.00
:price 59.00
:weight 0.3
:status "InStock"})
(sql/with-connection db-spec
(sql/insert-record :product prod-12345))
Run Code Online (Sandbox Code Playgroud)
但是,它status是一个枚举,因此您不能将其作为普通字符串插入而不将其强制转换为枚举: …
以下示例来自Python 2.7上的REST数据库驱动程序.
在__setattr__下面的方法中,如果我使用注释掉的getattr()行,它会将对象实例化性能从600 rps降低到230.
为什么getattr()比self.__dict__.get()这种情况慢得多?
class Element(object):
def __init__(self, client):
self._client = client
self._data = {}
self._initialized = True
def __setattr__(self, key, value):
#_initialized = getattr(self, "_initialized", False)
_initialized = self.__dict__.get("_initialized", False)
if key in self.__dict__ or _initialized is False:
# set the attribute normally
object.__setattr__(self, key, value)
else:
# set the attribute as a data property
self._data[key] = value
Run Code Online (Sandbox Code Playgroud) 而不是将发布推送到PyPi和GitHub,让PyPi使用最新的GitHub主机会更容易.有没有正确的方法来做到这一点?
我知道你可以在install_requires中将依赖关系列为GitHub repos,但有没有办法为主包执行此操作?
例如,当您使用easy_install安装Flask时,它会从多个源读取,包括GitHub,它在安装URL中列出(https://github.com/mitsuhiko/flask/blob/master/setup.py#L78) :
$ sudo easy_install Flask
Searching for Flask
Reading http://pypi.python.org/simple/Flask/
Reading http://github.com/mitsuhiko/flask/
Run Code Online (Sandbox Code Playgroud)
列出setup.py中的URL是什么导致easy_install也从GitHub读取?
如果是这样,如果GitHub版本比PyPi版本更新,它是否总是从GitHub安装?
pip的效果是否相同?
在下面的示例中,resp.results是一个迭代器.
版本1:
items = []
for result in resp.results:
item = process(result)
items.append(item)
return iter(items)
Run Code Online (Sandbox Code Playgroud)
版本2:
for result in resp.results:
yield process(result)
Run Code Online (Sandbox Code Playgroud)
返回版本1中的iter(项目)在性能/内存节省方面是否比简单返回项目更好/更差?
在"Python Cookbook"中,Alex表示明确的iter()"更灵活,但不经常使用",但是在版本2中返回iter(items)与yield的优缺点是什么?
另外,对迭代器和/或产量进行单元测试的最佳方法是什么? - 你不能做len(结果)检查列表的大小?
在最近的博客文章中,Adrian Mouat表示App Engine不支持Clojure并发,例如代理.但是,GAE Java支持 App Engine 1.6.4版本的线程.
App Engine是否完全支持Clojure并发模型?
我现在正在尝试学习如何使用Python中的Bulbflow连接到Neo4j服务器并在其上运行Cypher查询.我不明白的是连接到neo4j服务器的两种可能性之间的区别:
1)图表
from bulbs.neo4jserver import Graph
g = Graph()
Run Code Online (Sandbox Code Playgroud)
from bulbs.neo4jserver import Neo4jClient
client = Neo4jClient()
Run Code Online (Sandbox Code Playgroud)
有谁能请解释这里的概念差异?哪种方式更好的选择我是否想要执行(相当多)Cypher查询服务器并最终并行执行?
PS:我没有足够的声誉为这个问题创建一个标签"bulbflow":)
如果您有一段普通文本,则可以单击文本内的任意位置并拖动鼠标以突出显示该文本.但是,如果文本位于锚点/链接标记内,则不允许您单击并拖动 - 链接捕获鼠标并阻止其发生.
要查看我的意思,请在此页面上找到一个文本链接,然后尝试在其中单击并拖动以选择它.它不会让你 - 你必须在链接外面点击并拖动它.
你需要在JavaScript/JQuery中做什么才能暂时禁用链接,以便拖动并突出显示它?
我不能只启动外环线的原因是因为在该段每个字都是一个超链接内 - 这是一个视频的转录和各个环节同步到视频片段.
我刚刚开始使用Jython,有时在.py文件上运行jython会生成.class文件,但这并不总是会发生.
起初我认为触发器是你必须在.py文件中定义一个Python类,但显然即使这样也不会生成.class文件.
触发类文件的机制是什么?
谢谢.
关于这一点的看法似乎很复杂 - 有没有Pythonic"正确的方法"来做到这一点?