在SQLAlchemy查询中搜索Set

时间:2014-01-24 15:54:01

标签: python sqlalchemy pyramid

我在完全不同的服务器中有2个数据库,两者之间没有任何关系。两个数据库中都有一列具有相同的数据。我需要根据该数据进行匹配,以便我可以在一个视图中从两个数据库中获取其他信息。

以下是我views.py

中的内容
@view_config(route_name='cis', renderer='templates/cis.pt')
def cis(request):
    db1 = cis_db.query(site.site_id).join(site_tag).filter(site_tag.tag_id.like(202)).all()
    db2 = DBSession.query(A_School.cis_site_id).all()
    sites = set(db1).intersection(db2)
    return {
        'newsites': cis_db.query(site_tag).filter(site_tag.tag_id.like(202)).count(),
        'schools': DBSession.query(table).all(),
        'test': DBSession.query(table.cis_site_id.like(sites)).all(),
        }

我呈现的页面返回此错误:

ProgrammingError: (ProgrammingError) ('Invalid parameter type.  param-index=0 param-type=set', 'HY105')

后面的sql代码中包含正确的数字。我认为问题在于sites中返回的内容。以下是该错误后页面立即返回的内容:

u'SELECT [A_School].cis_site_id LIKE ? AS anon_1 
FROM [A_School]' (set([(1,), (2,), (3,), (4,), (5,)]),)

因此,返回的数据看起来是正确的,但我认为领先的set会放弃sites部分中.like的查询。不确定如何正常工作。

1 个答案:

答案 0 :(得分:1)

您应该使用in_(...)代替like(sites)吗? 实际上,in_([s[0] for s in sites])是为了从设置的网站中解开元组。