【问题标题】:Looping SQL query in python在python中循环SQL查询
【发布时间】:2017-01-23 22:25:59
【问题描述】:

我正在编写一个 python 脚本来查询数据库中的 URL 字符串。下面是我的sn-p。

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 链接。它给我一个表中的 baseURL 和另一个表中的视频网站字符串。

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 条记录。

提前感谢您的时间和帮助。

【问题讨论】:

  • 为什么没有一个查询:select distinct...

标签: python mysql loops


【解决方案1】:

我不确定我是否完全理解你想要做什么。我认为您的目标是获取所有视频链接的列表。您可以通过加入来自sitesitevideobaseurl 和来自videovideositestring 来获得视频链接。

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

代码应该是这样的:(小心,我没有测试这个)

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()

如果您有其他原因想要逐个获取这些内容,一个想法可能是获取所有SiteIDs 的列表并将它们存储在一个列表中。然后,您为该列表中的每个项目启动一个循环,并通过参数化查询将 id 插入到查询中。

【讨论】:

  • nits,我认为@Maurice 的回答正是您所需要的。您的代码几乎是正确的,但是您将查询限制为每次执行应用程序时只获取一行,并且对于每次运行,您可能需要更改 id ... Maurice 解决方案效率更高,更像我们用于在这样的应用程序中编码。
  • 嗨莫里斯。这正是我想要的。但是您的查询给了我输出:youtube.com/watch?v=veoh.com/videos。它没有加入站点字符串。我写sql查询已经很长时间了。对此的任何意见表示赞赏。
  • 嘿尼特,我刚刚拿了你的代码做进一步处理。我编辑了回复并稍微更改了处理方式,请重试。
  • 任何帮助将 siteId 列表存储到列表中并通过参数化查询将 id 插入查询来启动循环。我无法弄清楚。提前致谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多