cx_Oracle:我如何迭代结果集?

有几种方法可以遍历结果集。各方的权衡是什么?

0
额外 编辑
意见: 1
你能更具描述性吗?这个领域在哪里? “挑”是什么意思?你想达到什么目的?
额外 作者 Anonymous User,
你见过
额外 作者 steve_mtl,
这也有例外,但一般的经验法则是:如果有多种方法可以做到这一点,可能是因为每种方式都适用于不同的情况。否则只会有一种方法。
额外 作者 Jeffrey Kemp,
不,我没有,谢谢
额外 作者 Daan,

6 答案

几个星期前,我添加了一个类似于 Magic Fields 的功能。

Here's the github project. The most important thing is in this file: js/custom_fields/media_image.js

2
额外

这对我来说听起来像WordPress中的 post_thumbnail功能。它会在标签框下方的右侧添加一个框。默认情况下,该框显示一个链接“设置特色图像”。

当你点击它时,媒体库弹出窗口打开,你可以选择一张你以前上传到帖子的图片作为精选图片。

然后你可以使用:

if (has_post_thumbnail()) {
  the_post_thumbnail();
}

在你的主题中显示特色图片。

要启用post_thumbnail,只需添加:

add_theme_support( 'post-thumbnails' );

到你主题的function.php

1
额外

为了回答你的问题,你打开了一个替代方案吗?我建议在帖子中添加一张照片,根据图片的特定类别提交帖子,也可以根据您的需要添加纯文本自定义字段以检索该特定图片。

$image = get_posts('cat=the_category&meta_key=the_key&meta_value=the_value');
foreach($image as $img){
    setup_postdata($img);
    //whatever your markup is...
    echo '
'.the_content().'

'; //or echo '
'.$img->post_content.'

'; }

只是一个想法...

0
额外
我正在用WordPress重新开发我的商业网站,我目前有几张图片以这种方式呈现给网页。不幸的是,我将大约10张图片加载到幻灯片中。就在今天,我的想法是将所有十张图片加载到同一篇文章中,只需要调用一个帖子而不是十个。现在回去清理代码!
额外 作者 cmcculloh,
有趣的,可以看看这个想法。不过,我已经看到了我正在谈论的与我运行的播客一起使用的音频概念。这可能是我需要看他们的代码,看看他们是如何处理这个问题的。
额外 作者 Daan,

规范的方法是使用内置的游标迭代器。

curs.execute('select * from people')
for row in curs:
    print row

您可以使用 fetchall()一次获取所有行。

for row in curs.fetchall():
    print row

使用它可以方便地创建一个包含返回值的Python列表:

curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]

这对较小的结果集可能很有​​用,但如果结果集较大,可能会产生不良副作用。

  • 您必须等待整个结果集返回 您的客户进程。

  • 您可能会在客户端占用大量内存 内置列表。

  • Python可能需要一段时间来构建和解构 无论如何,你将立即放弃列表。


如果您知道结果集中有单行返回,您可以调用 fetchone()来获取单行。

curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]

最后,您可以循环遍历一次获取一行的结果集。一般来说,使用迭代器不会有什么特别的优势。

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()
0
额外
我认为SScursor是针对MySQL的。但是任何具有fetchall()的东西都可能具有相同的内存使用情况,因为它会返回所有返回的行的列表。
额外 作者 Mark Harrison,
关于第二种方法,如果您使用SScursor?它会消耗很多内存吗?
额外 作者 Sylvain,

我的首选方法是游标迭代器,但首先设置游标的arraysize属性。

curs.execute('select * from people')
curs.arraysize = 256
for row in curs:
    print row

在此示例中,cx_Oracle将一次从Oracle 256行中获取行,从而减少需要执行的网络往返次数

0
额外

也有 psyco-pg 似乎这样做的方式......从我所收集的内容看来,它似乎创建了类似字典的行代理来将密钥查找映射到查询返回的内存块中。在这种情况下,获取整个答案并在行上使用类似的代理工厂似乎是有用的想法。想想看,虽然感觉比Lua更像Lua。

另外,这应该适用于所有 PEP-249 DBAPI2.0 接口,不仅仅是甲骨文,还是您的意思是使用 Oracle 的最快速度?

0
额外