将一个获取请求中的数据与另一个

时间:2016-07-29 21:45:37

标签: python postgresql

我有三个postgres表:用户,文件等。

users表与files表有一对多的关系 files表与likes表有一对多的关系。

我的应用程序有一个包含两个部分的提要:“社区”和“喜欢”。 “社区”部分包含所有公共用户文件,“赞”部分包含用户喜欢的所有文件。在加载feed时,我获取了两个部分的文件,最后我得到了每个部分的字典数组。我的查询看起来像这样:

cur.execute('SELECT f.*, u.username from files as f, users as u '
            'where u.id = %i AND f.user_id = %i ORDER BY f.id DESC' %
            (user.id, user.id))

cur.execute('SELECT f.*, u.username from files as f, users as u, likes as l '
            'where l.user_id = %i AND l.file_id = f.id AND f.share = True AND '
            'u.id = f.user_id ORDER BY f.id DESC' % (user.id))

我的“社区”Feed有一个类似的按钮,在喜欢该文件时会更改为“已赞”。由于我有一个“社区”文件数组和一个“喜欢”文件数组,检查“社区”数组中的文件ID是否也在“喜欢”数组中的最佳方法是什么,所以我可以更新按钮?

“社区”和“喜欢”数组由以下字典组成:

community_files_dict = {'file_id': file[0], 'user_id': file[1], 'title': file[2],
                        'date': date_final, 'shared': file[4], 'username': file[5]}

liked_files_dict = {'file_id': file[0], 'user_id': file[1], 'title': file[2],
                    'date': date_final, 'shared': file[4], 'username': file[5]}

1 个答案:

答案 0 :(得分:0)

在第一个查询中检查所需的内容:

cur.execute('''
    select f.*, u.username, l.user_id is not null as liked
    from
        files f
        inner join
        users u on u.id = f.user_id
        left join
        likes l on l.user_id = u.id and f.share = true
    where u.id = %s
    order by f.id desc
''', (user.id,))

改进:join语法,多行字符串,通过驱动程序而不是字符串插值传递参数。