小编Hel*_*lgi的帖子

搜索多对多关系中的项目

我目前正在编写一个应用程序,允许用户存储图像,然后标记这些图像.我正在使用Python和Peewee ORM(http://charlesleifer.com/docs/peewee/),这与Django的ORM非常相似.

我的数据模型看起来像这样(简化):

class Image(BaseModel):
    key = CharField()

class Tag(BaseModel):
    tag = CharField()

class TagRelationship(BaseModel):
    relImage = ForeignKeyField(Image)
    relTag   = ForeignKeyField(Tag)
Run Code Online (Sandbox Code Playgroud)

现在,我从概念上理解如何查询具有给定标记集的所有图像:

SELECT Image.key
  FROM Image
INNER JOIN TagRelationship
    ON Image.ID = TagRelationship.ImageID
INNER JOIN Tag
    ON TagRelationship.TagID = Tag.ID
 WHERE Tag.tag
       IN ( 'A' , 'B' )     -- list of multiple tags
GROUP BY Image.key
HAVING COUNT(*) = 2         -- where 2 == the number of tags specified, above
Run Code Online (Sandbox Code Playgroud)

但是,我也希望能够进行更复杂的搜索.具体来说,我希望能够指定一个"所有标签"列表 - 即图像必须包含要返回的所有指定标签,以及"any"列表和"none"列表.

编辑:我想澄清一点.具体来说,上述查询是"所有标签"式查询.它返回包含所有给定标签的图像.我希望能够指定类似的内容:"给我所有带有标签的图像(绿色,山峰),任何一个标签(背景,风景),但不是标签(数字,绘图)".

现在,理想情况下,我希望这是一个SQL查询,因为使用LIMIT和OFFSET,分页变得非常容易.我实际上有一个实现工作,我只是将所有内容加载到Python集中,然后使用各种交集运算符.我想知道的是,是否有一种方法可以同时执行此操作?

此外,对于那些感兴趣的人,我通过电子邮件向Peewee的作者发送了关于如何使用Peewee表示上述查询的电子邮件,他回答了以下解决方案:

Image.select(['key']).group_by('key').join(TagRelationship).join(Tag).where(tag__in=['tag1', 'tag2']).having('count(*) = …
Run Code Online (Sandbox Code Playgroud)

python sql peewee

7
推荐指数
1
解决办法
1506
查看次数

使用Bottle.py在每个页面的模板上下文中包含变量

你有没有在Flask中获得的bottle.py等效的上下文处理器?

python templates bottle flask

7
推荐指数
1
解决办法
1336
查看次数

为什么Web.py不允许我在端口80上运行服务器?

我试图用Web.py创建一个网站,但它不允许我在端口80上打开创建套接字,但它适用于所有其他端口.

我有端口转发所有这些,所以这不是问题.

python main.py 80
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我得到错误:

http://0.0.0.0:80/
Traceback (most recent call last):
  File "main.py", line 43, in <module>
    app.run()
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 311, in run
    return wsgi.runwsgi(self.wsgifunc(*middleware))
  File "/usr/local/lib/python2.7/dist-packages/web/wsgi.py", line 54, in runwsgi
    return httpserver.runsimple(func, validip(listget(sys.argv, 1, '')))
  File "/usr/local/lib/python2.7/dist-packages/web/httpserver.py", line 148, in runsimple
    server.start()
  File "/usr/local/lib/python2.7/dist-packages/web/wsgiserver/__init__.py", line 1753, in start
    raise socket.error(msg)
socket.error: No socket could be created
Run Code Online (Sandbox Code Playgroud)

到目前为止我的代码是:

import MySQLdb
import web
import hashlib as h


urls = (

'/', "index", "/register/?", "register", "/login/?", "login", "/thankyou/?", "thankyou"

) …
Run Code Online (Sandbox Code Playgroud)

python web.py

6
推荐指数
2
解决办法
1万
查看次数

你如何通过其API将差异发布到ReviewBoard?

我一直在努力通过他们的API将差异发布到ReviewBoard.我已设法登录到服务器并创建一个新帖子,但我未能正确发布diff文件的内容.

我是编写此类应用程序的新手,但我的目标是使用一步脚本:

  1. 使用svn存储库区分文件(预提交),
  2. 向ReviewBoard添加评论请求并从当前文件发布差异,

可能是以后,该脚本可以是svn预提交钩子的一部分.

我的python尝试看起来像:

import urllib.request
import urllib.parse
import os.path

... login to the reviewboard server with
urllib.request.HTTPBasicAuthHandler ...

diff_path = '/path/to/file'
diff_name = 'my.diff'
diff_path = os.path.join(diff_path, diff_name)

diff_val = open(diff_path,'r')

# load the diff into the http data POST request
diff_header =                                                    \
     '-- SoMe BoUnDaRy   \n'                                     \
  +  'Content-Disposition: form-data; name=path; filename='      \
  +  '"' + diff_name + '"\n\n'                                   \
  +  diff_val.read()  + '\n'                                     \
  +  '-- SoMe BoUnDaRy --'

data ={'path': diff_header, 'basedir': '/path/to/file/in/rep'} …
Run Code Online (Sandbox Code Playgroud)

python http review-board

6
推荐指数
1
解决办法
1915
查看次数

运算符可以作为python中的类方法重载吗?

为了使扩展看起来很干净,我试图在python中实现">>"运算符作为类方法.我不知道怎么回事.我不想创建一个实例,因为我真的在类本身上运行.

>>> class C:
...     @classmethod
...     def __rshift__(cls, other):
...         print("%s got %s" % (cls, other))
...
>>> C.__rshift__("input")
__main__.C got input
>>> C() >> "input"
__main__.C got input
>>> C >> "input"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>: 'classobj' and 'str'
Run Code Online (Sandbox Code Playgroud)

背景资料:

我试图在peewee ORM中实现视图(类似于Django).Peewee允许您将数据库表及其关系定义为类,如下所示:

class Track(Model):
    title = CharField()
    artist = ForeignKeyField(Artist)

class Artist(Model):
    name = CharField(unique = True)
    location = ForeignKeyField(Location)

class Location(Model):
    state = CharField(size …
Run Code Online (Sandbox Code Playgroud)

python class operator-overloading peewee

6
推荐指数
1
解决办法
636
查看次数

整合Deltawalker for Mac OS X和Mercurial的extdiff扩展

我正在对Deltawalker进行评估,虽然它似乎是一个很好的工具,但没有一种明显的方法可以让它与mercurial集成以便我可以做到;

hg extdiff -r some_rev -r some_other_rev
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何配置.hgrc来做到这一点?

mercurial deltawalker

5
推荐指数
1
解决办法
711
查看次数

从StarTeam迁移到分布式源代码控制

我们目前正在为我们的项目使用StarTeam,许可证即将到期.我们正在考虑迁移到Team Foundation Server或类似的东西,但是有一种推动(主要是来自我自己和另一个人)转向某种形式的分布式版本控制.其中一个问题是我们的变更经理希望能够通过变更请求进行跟踪和发布(如在StarTeam中),我不相信这可以通过Mercurial或Git开箱即用(请如我错了请纠正我).

这是一个拥有15年历史的产品,拥有数千个java文件和PL/SQL包,由5-6个开发子团队维护,共有30-40个开发人员.对我而言,这似乎会使分布式存储库成为"早期提交,经常提交"思维模式的噩梦.事实上,每个团队都在同一个存储库中处理一个完全不同的子系统,这使得它在我的脑海中变得更加糟糕.

我们目前的StarTeam流程适用于任何变更:

  1. 锁定您要处理的文件,
  2. 进行全面更改并通过网络驱动器上的副本进行审核,
  3. 签入(并解锁)已更改的文件,希望有人没有强行破坏你的锁,
  4. 希望您的更改不会破坏其他人对其他文件的更改

就个人而言,我认为"锁定"文件的想法是荒谬的.团队之间应该有足够的沟通,这是你不需要的.

这里有没有人在类似大小的项目上有分布式存储库的经验?您能对版本控制和/或变更管理解决方案提出任何建议吗?主要要求是系统能够管理客户发起的变更请求,并迫使开发人员将其签到链接到一个.

谢谢.

git mercurial starteam dvcs

5
推荐指数
1
解决办法
6089
查看次数

拆分ikiwiki

我试图将一个ikiwiki分成两个wiki.

假设我有一个名为myiki的ikiwiki(比较来自 ikiwiki.info的这个问题),其中包含页面

pageA1,pageA2,...,pageB1,pageB2,...
Run Code Online (Sandbox Code Playgroud)

现在我想有两个称为wiki myikiAmyikiB,使得:

  • myikiA包含pageA1,pageA2,...
    历史myikiA应该包含那些页面的整个历史,但没有历史记录pageB1,pageB2,...

和:

  • myikiB包含pageB1,pageB2,...
    历史myikiB应该包含那些页面的整个历史但没有历史记录pageA1,pageA2,...

在第一步中,我制作了一份我的副本,scrdir并试图删除一个名为foothis 的页面(注意,在scrdir那里有文件调用foo.mdwn和目录foo).
为此,我执行了以下命令:

sudo git filter-branch --tree-filter 'find . -name foo* -exec rm -r -f  {} \;' --prune-empty -f HEAD

Rewrite 3cbc4646145e31cf7ce23d5e8397baaebab64c60 (179/1439)find: `./index/testdir/foo': No such file or directory
tree filter failed: find . -name foo* -exec rm -r -f  {} \;
Run Code Online (Sandbox Code Playgroud)

任何想法它有什么问题?

有没有办法给出一个页面列表并拆分维基如上所述?

git wiki ikiwiki

5
推荐指数
1
解决办法
293
查看次数

是否有PyScripter的Mercurial或Git版本控制插件?

我正在使用Python 3.x和PyScripter编写我的脚本.我真的很想念PyScripter中的版本控制功能 - 我被Qt和MpLab X宠坏了(我相信这是Eclipse的颠覆).事情很简单.现在我在PyScripter中没有任何版本控制,但我确实安装了Mercurial.我完全意识到我可以手工管理Mercurial,但我很懒惰,讨厌手工操作.我有其他任何一些光滑和顺畅的选择吗?我已经准备好使用任何其他vc系统(例如git) - 我只是想知道什么是最无痛的方式(正确的).

python git version-control mercurial pyscripter

5
推荐指数
1
解决办法
1721
查看次数

如何将本地提交置于拉头之上

如何让我的本地提交出现在最近拉头的顶部?

这是发生了什么:

1)我做了一些改变

2)在我的本地存储库中提交它们

3)从远程存储库中拉出(现在我有2个eads,其中一个是我的本地更改)

4)如何将我的本地更改放在另一个头上?我也想接受最近拉头的所有更改,以便它不要求我合并那些不属于我所做的本地更改集的文件.

mercurial

4
推荐指数
1
解决办法
84
查看次数