2016-09-15 136 views
2

我在写一个python脚本,它查询数据库中的URL字符串。以下是我的片段。在Python中循环SQL查询

db.execute('select sitevideobaseurl,videositestring ' 
      'from site, video ' 
      'where siteID =1 and site.SiteID=video.VideoSiteID limit 1') 
result = db.fetchall() 

filename = '/home/Site_info' 
output = open(filename, "w") 
for row in result: 
    videosite= row[0:2] 
    link = videosite[0].format(videosite[1]) 
    full_link = link.replace("http://","https://") 
    print full_link 
    output.write("%s\n"%str(full_link)) 
output.close() 

查询基本上是给一个URL link.It给我从基本URL表,并从另一台视频网站的字符串。

output: https://www.youtube.com/watch?v=uqcSJR_7fOc 

SiteID是主键,它是int而不是按顺序。

我希望循环此sql查询为每次执行选择一个新的siteId,这样我每次都有唯一的站点URL并将所有结果写入文件。

desired output: https://www.youtube.com/watch?v=uqcSJR_7fOc 
       https://www.dailymotion.com/video/hdfchsldf0f 

约有1178条记录。

感谢您的时间和事先的帮助。

+0

为什么不是一个查询:'select distinct ...'? – Parfait

回答

1

我不知道我是否完全明白你想要做什么。我认为你的目标是获得所有视频链接的列表。您可以通过加入从sitevideositestringvideo链接到视频。

根据我的经验,让数据库完成繁重的工作要容易得多,这是为此而构建的。联接表格应该更有效率,返回所有结果,然后循环遍历它们,而不是对每行的数据库进行后续查询。

的代码看起来应该是这样的:如果你有其他的原因,希望通过一个获取这些ONY(请注意,我没有测试这个)

query = """ 
select s.sitevideobaseurl, 
     v.videositestring 
    from video as v 
    join site as s 
    on s.siteID = v.VideoSiteID 
     """ 
db.execute(query) 
result = db.fetchall() 

filename = '/home/Site_info' 
output = open(filename, "w") 
for row in result: 
    link = "%s%s" % (row[0],row[1]) 
    full_link = link.replace("http://","https://") 
    print full_link 
    output.write("%s\n" % str(full_link)) 
output.close() 

的想法可能是去取所有SiteID s的列表并将它们存储在一个列表中。之后,您将为该列表中的每个项目启动一个循环,并通过参数化查询将该ID插入到查询中。

+0

尼特,我认为@Maurice的答案正是你所需要的。你的代码几乎是正确的,但是你限制查询只在每次执行应用程序时得到一行,并且对于每次运行,你可能需要更改ID ... Maurice解决方案效率更高,更像我们用于在这样的应用程序中编码。 –

+0

嗨,Maurice.That正是我想要的。但是,您的查询为我提供了输出:https://www.youtube.com/watch?v = https://www.veoh.com/videos/。它没有加入网站字符串。很长一段时间,我写了SQL查询。任何关于这一点的输入是赞赏。 – nits

+0

嘿尼特,我只是把你的代码进一步处理。我编辑了我的回复并稍微改变了处理,请重试。 – Maurice