2016-09-08 8 views
0

私のpython3スクリプトはMySQLと同じ結果を生成していません。私のクエリは、その週に値が変化した行を返します。Python3スクリプトが同じクエリのMySQLエンジンと同じ結果を表示しない

Pythonスクリプト:

query = "SELECT cw.opportunityid, cw.probability, pw.probability, cw.stage, pw.stage, cw.amount, pw.amount, " \ 
    "cw.closedate, pw.closedate " \ 
    "FROM opty_data cw " \ 
    "LEFT JOIN opty_data pw ON cw.opportunityid = pw.opportunityid " \ 
    "AND pw.Week = \"{0}\" " \ 
    "WHERE cw.Week = \"{1}\" " \ 
    "AND IF(pw.opportunityid IS NULL, TRUE, ((cw.probability <> pw.probability) OR (cw.stage <> pw.stage) " \ 
    "OR (cw.Amount<>pw.Amount) OR (cw.CloseDate <> pw.CloseDate)))".format(Prev_Week,Curr_Week) 
cursor.execute(query) 
results = dictfetchall(cursor) 
print(results) 

出力:

[{ 
     'opportunityid' : '1', 
     'probability' : '50', 
     'amount' : Decimal('30.35'), 
     'closedate' : datetime.date(2016, 8, 22), 
     'stage' : 'Proposal' 
    }, { 
     'opportunityid' : '2', 
     'probability' : '50', 
     'amount' : Decimal('115.00'), 
     'closedate' : datetime.date(2016, 6, 30), 
     'stage' : 'Proposal' 
    }, { 
     'opportunityid' : '3', 
     'probability' : '50', 
     'amount' : Decimal('200.00'), 
     'closedate' : datetime.date(2016, 8, 29), 
     'stage' : 'Proposal' 
    } 
] 

クエリ:MySQLが正しく表示

SELECT cw.opportunityid, cw.probability, pw.probability, cw.stage, pw.stage, cw.amount, pw.amount, cw.closedate, pw.closedate FROM opty_data cw 
LEFT JOIN opty_data pw 
ON cw.opportunityid = pw.opportunityid AND pw.Week = "2016-35" WHERE cw.Week = "2016-36" 
AND IF(pw.opportunityid IS NULL, TRUE, ((cw.probability <> pw.probability) OR (cw.stage <> pw.stage) OR (cw.Amount<>pw.Amount) OR (cw.CloseDate <> pw.CloseDate))) 

予想される出力:

+-----------------+-------------+-------------+----------------+---------------- 
+------------+-------------+------------+------------+ 
| opportunityid | probability | probability | stage   | stage 
| amount  | amount  | closedate | closedate | 
+-----------------+-------------+-------------+----------------+---------------- 
+------------+-------------+------------+------------+ 
| 1 | 50   | 50   | Proposal  | Proposal 
| 20.35 | 30.35 | 2016-08-22 | 2016-08-22 | 
| 2 | 50   | 50   | Proposal  | Proposal 
| 113.00 | 115.00 | 2016-09-06 | 2016-06-30 | 
| 3 | 0   | 50   | Drop   | Proposal 
| 200.00 | 200.00 | 2016-08-29 | 2016-08-29 | 
+0

実行したSQLクエリを投稿できますか? – MooingRawr

+1

データは同じです。ただ、pythonは結果をpython辞書として返します。必要に応じてフォーマットする必要があります。 –

+0

@MooingRawr:元の投稿にクエリを追加しました。 – r0xette

答えて

1

Python辞書は一意のキー値のペアで構成されているため、1つのキーは辞書に一度しか表示されません。生のSQLクエリは、単一の行の同じ列から2つの異なる値を返すため、列の2番目の出現はディクショナリの最初のものを上書きします。ただし、ASキーワードを使用して列のエイリアスを指定することで、これを簡単に修正できます。次の例をご覧ください。

SELECT 
    p1.name AS p1name, 
    p2.name AS p2name 
FROM 
    p1, p2 
WHERE 
    p1.id != p2.id 
+0

うわー。どうすればそれを忘れることができますか?ご協力いただきありがとうございます。 – r0xette

+0

これがうまくいく場合は、回答を受け入れることを検討してください。 ;-) – Phidelux

関連する問題