V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
azure
V2EX  ›  Python

求助,如何把一个现有的key-value数据集合并到某个sql查询结果中?

  •  
  •   azure · 2012-12-30 12:38:19 +08:00 · 3731 次点击
    这是一个创建于 4341 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在数据库中取出id和name,然后我外部还有一个字典,{KEY,VALUE}是id和性别.
    所以现在有两个数据集:
    数据集1:
    select id,name from table.
    数据集2:
    {"1":"男","2":"女",.....}

    怎么把这两个数据合并起来让查询结果是

    id name sex
    1 james 男
    2 kobe 女


    先查询出数据库中的id和名字,然后循环赋值这样效率感觉好低下。 sql查询里有没有类似的解决方法?或者其他更好的解决方案?
    7 条回复    1970-01-01 08:00:00 +08:00
    plprapper
        1
    plprapper  
       2012-12-30 12:43:02 +08:00
    没明白为啥性别没存数据库呢
    azure
        2
    azure  
    OP
       2012-12-30 12:46:47 +08:00
    @plprapper 这个代码只是为了让需求描述得更容易理解。真实需求这里不是性别,而是某个外部数据,或者一些经常需要变动所以存在内存缓存中并没有写到数据库的数据,而且这部分数据本身并不太需要本地化保存。
    plprapper
        3
    plprapper  
       2012-12-30 13:11:06 +08:00   ❤️ 1
    你数据不持久化到数据库。 这个和sql还能有啥联系吗?
    除非是数据库+插件+nosql 做个关联 。商业项目不推荐。

    另外所谓的效率低是什么意思 编码层面上的还是运行。数据量多大呢?
    不愿意写for循环就写到对象构造里面去呗 。
    运行层面,不知道你如何实现的呢。
    notedit
        4
    notedit  
       2012-12-30 14:17:03 +08:00
    你数据量有多少 循环一下比走一次网络快多了 循环一下百万级别的都不会有性能问题
    azure
        5
    azure  
    OP
       2012-12-30 14:24:38 +08:00
    @notedit 所以说,即使我把这些数据丢到另一个同服务器的数据库里做跨数据库查询,性能都不如循环嘛?

    以下两种情况相比循环处理,性能谁高?还是说,循环处理依然快过以下2种?
    1.新建一个同服务器上的数据库用来存数据集2,然后跨数据库查询。
    2.同数据库里新建一张表(但是因为这个数据库是一个完整系统,去申请建一个新的表会比较麻烦,不一定会被同意)。
    notedit
        6
    notedit  
       2012-12-30 14:36:39 +08:00
    @azure 如果是我选的话 我会选第二种方案

    为什么? 一是查询方便 而是没有给系统造成额外的复杂度

    不赞成跨数据库查询 给系统造成额外的复杂度

    你数据量有多少 百万级别的都可以放到进程内存中 遍历一边也就毫秒级的时间吧
    azure
        7
    azure  
    OP
       2012-12-30 14:53:59 +08:00
    @notedit 好吧。就按您的说法做。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3008 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:43 · PVG 22:43 · LAX 06:43 · JFK 09:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.