如何打印左连接的结果

时间:2017-09-01 03:07:26

标签: python mysql

我在python中显示左连接的结果时出现问题。问题在于:

我有两张桌子。一个Customers表和一个Weights表,用于跟踪每个客户的权重记录。

客户表:

pID   Name    
01    John
02    Charlotte

权重表:

wID   pID    Weight
01    01     90
02    01     93
03    01     92
04    02     76
05    02     74

当我将左连接存储在python游标中时,我得到了这个结果。

pID    Name    wID    Weight
01     John    01     90
01     John    02     93
01     John    03     92
02     John    04     76
02     John    05     74

我的目标是展示:

pID: 01
Name: John
    wID: 01    Weight: 90
    wID: 02    Weight: 93
    wID: 03    Weight: 92

pID: 02
Name: Charlotte
    wID: 04    Weight: 76
    wID: 05    Weight: 74

现在是Python代码。我有一个Customer类,用于存储人员ID,名称和一个包含为该人注册的所有权重的数组。

因此,我希望将所有客户及其权重存储在一个名为customers的列表中。

    customers = []
    query = "SELECT * FROM customers LEFT JOIN weights ON customers.idcustomers = weigths.idcustomers"
    try:
        self.cur = self.connect()
        self.cur.execute(query)
        queryResults = self.cur.fetchall()
        self.desconectar()
    except Exception as e:
        print(e)
        pass
    for row in queryResults:
        found = False
        for cus in customers:
            if row[0] == cus.id:
                cus.weights.append(Weight(row[0],row[2],row[3]))
                found = True
        if found == False:
            newCustomer = Customer(row[0],row[1])
            newCustomer.weights.append(Weight(row[0],row[2],row[3]))
            customers.append(newCustomer)
    return customers

出于某种原因,我将所有权重添加到每个客户中。

结果如下:

pID: 01
Name: John
    wID: 01    Weight: 90
    wID: 02    Weight: 93
    wID: 03    Weight: 92
    wID: 04    Weight: 76
    wID: 05    Weight: 74

pID: 02
Name: Charlotte
    wID: 01    Weight: 90
    wID: 02    Weight: 93
    wID: 03    Weight: 92
    wID: 04    Weight: 76
    wID: 05    Weight: 74

我已经尝试了一段时间来解决这个问题,而且我真的不知道为什么每个人都在存储每一个重量。

此代码是原始脚本的简化版本,我希望我不会搞砸!

欢迎任何帮助..提前致谢!

编辑:查询结果是正确的,我在翻译SQL行时犯了一个错误。

失败的是python代码。

1 个答案:

答案 0 :(得分:0)

确保您在两个表格中加入pID

我不确定您是如何定义这些类的,但似乎JOIN query条件加入了pID wID query = "SELECT * FROM customers LEFT JOIN weights ON customers.idcustomers = weighs.idweights" {1}}:

  

LEFT JOIN

因此,请检查Python的结果,确保结果符合您的预期。

然后,转到追加结果的Weight逻辑。但我认为应该没问题。

PS:班级PesoRegex.Match("1) Exception Information", @"(\d)\) Exception Information").Groups[1].Value 之间是否存在差异?