python- 如何根据公共值连接两个单独的查询

python- how to join two seperate queries based on common value

我有两个链接到不同数据库的查询

query = "select name ,ctry from xxxx where xxxx"
        cursor.execute(query)
        results1 = list(cursor.fetchall())

for row in results1:
            query1 = "SELECT sessionname, country FROM xxx where and sessions.sessionname = '"+row[0] +"'"
            cur.execute(query1)
            results2.append(cur.fetchall())

如果它们具有公共值(会话名称和名称),如何连接它们并将其输出保存到文件。两个查询都位于不同的 dbo (oracle, postgresql)

我的代码在这里:

try:

        query = """select smat.s_name "SQLITE name" ,smed.m_ctry as "Country", smed.m_name "HDD Label" from smart.smed2smat ss, smart.smed smed, smart.smat smat where ss.M2S_SMAT=smat.s_id and ss.m2s_smed=smed.m_id  and smed.m_name like '{0}%' order by smat.s_name""" .format(line_name)
        cursor.execute(query)
        columns = [i[0] for i in cursor.description]
        results1 = cursor.fetchall()


        for row in results1:
            query1 = "SELECT sessions.sessionname, projects.country , projects.projectname FROM momatracks.sessions, momatracks.projects, momatracks.sessionsgeo where sessions.projectid = projects.id and sessionsgeo.sessionname = sessions.sessionname and sessions.sessionname = '"+row[0] +"'  order by sessions.sessionname"
            cur.execute(query1)
            results2 =cur.fetchall()
            print "results1 -----> \n:", row

            tmp=[]
            output_items = []

            for tmp in results2:
                print "---> \n", tmp

            try:

                stations_dict = dict([(item[0], item[1:]) for item in tmp])
                for item in row:
                    output_item = list(item) + stations_dict.get(item[0], [])
                    output_items.append(output_item)


            except Exception, f:
                print str (f)

          cursor.close()
        cur.close()

    except Exception, g:
        print str ( g )


except Exception, e:
    print str ( e )

我从 row 和 tmp 得到的结果是:

row - WE246JP_2015_10_11__14_53_33', 'NLD', '031_025_SQLITE_NLD1510_03INDIA

tmp - WE246JP_2015_10_11__14_53_33', 'NLD', 'NLD15_N2C1-4_NL'

如何正确连接它们?我希望输出看起来像这样:

output_items - WE246JP_2015_10_11__14_53_33', 'NLD', '031_025_SQLITE_NLD1510_03INDIA', 'NLD15_N2C1-4_NL'

目前我收到这个错误:

can only concatenate list (not "str") to list

另外值 station_dict 看起来像这样 :( 这不是我想要做的

'W': 'E246JP_2015_10_11__15_23_33', 'N': 'LD15_N2C1-4_NL3'

我知道我的代码有问题,很容易加入。谁能给我解释一下?我使用了以下方法:

http://forums.devshed.com/python-programming-11/join-arrays-based-common-value-sql-left-join-943177.html

我想你可以在这里使用子查询。我没有办法测试它,但我认为它应该是这样的:

SELECT * 
  FROM (SELECT smat.s_name "SQLITE name" ,
               smed.m_ctry as "Country", 
               smed.m_name "HDD Label" 
          FROM smart.smed2smat ss, 
               smart.smed smed, 
               smart.smat smat 
         WHERE ss.M2S_SMAT=smat.s_id 
           AND ss.m2s_smed=smed.m_id  
           AND smed.m_name like '{0}%' 
         ORDER BY smat.s_name) t1,
       (SELECT sessions.sessionname, 
               projects.country , 
               projects.projectname 
          FROM momatracks.sessions, 
               momatracks.projects, 
               momatracks.sessionsgeo 
         WHERE sessions.projectid = projects.id 
           AND sessionsgeo.sessionname = sessions.sessionname 
           AND sessions.sessionname = '"+row[0] +"'  
         ORDER BY sessions.sessionname) t2
 WHERE t1."SQLITE name" = t2.sessionname ;

如果两个数据库中的会话完全相同,则只需压缩结果:

query = """
    select
        smat.s_name "SQLITE name",
        smed.m_ctry as "Country",
        smed.m_name "HDD Label"
    from
        smart.smed2smat ss
        inner join
        smart.smed smed on ss.M2S_SMAT = smat.s_id
        inner join
        smart.smat smat on ss.m2s_smed = smed.m_id
    where smed.m_name like '{0}%'
    order by smat.s_name
""".format(line_name)
cursor.execute(query)
results1 = cursor.fetchall()

query1 = """
    select
        sessions.sessionname,
        projects.country,
        projects.projectname
    from
        momatracks.sessions,
        inner join 
        momatracks.projects on sessions.projectid = projects.id
        inner join
        momatracks.sessionsgeo on sessionsgeo.sessionname = sessions.sessionname
    where sessions.sessionname in {}
    order by sessions.sessionname
""".format(tuple([row[0] for row in results1]))
cur.execute(query1)
results2 = cur.fetchall()

zipped = zip(results1, results2)
output_list = [(m[0][0], m[0][1], m[0][2], m[1][2]) for m in zipped]

如果会话不同,则将每个结果作为要加入的字典。