Python MySQL比较两个表

时间:2015-12-10 14:02:38

标签: python mysql

我想学习如何比较两个表,以便找到不匹配的记录。

我是MySQL的初学者,因此目前正在努力找出用于比较两个表的查询。

假设我有两个结构相同的表。

表1(旧)

+------+--------+---------------+--------+-----------+
| "id" | "name" | "price" | "description" | "country" |
+------+--------+---------------+--------+-----------+
| "1"  | "a"    | "2"     | "Lord "       | "US"      |
| "2"  | "b"    | "3"     | "Taker"       | "UK"      |
+------+--------+---------------+--------+-----------+

表2(新)

+------+--------+---------------+--------+-----------+
| "id" | "name" | "price" | "description" | "country" |
+------+--------+---------------+--------+-----------+
| "1"  | "a"    | "5"     | "Lord"        | "DE"      |
| "2"  | "b"    | "6"     | "Taker"      | "JP"      |
+------+--------+---------------+--------+-----------+

Table1保存过时的数据,table2保存最新的数据。

我想检查表2中的名称,价格,描述字段是否与表1中的名称,价格,描述字段匹配。如果不匹配,则应使用表2中的数据更新表1。

我检查了folling网站,以便找出使用哪个Mysql查询: http://www.mysqltutorial.org/compare-two-tables-to-find-unmatched-records-mysql.aspx

但我无法弄清楚如何用Python写下来。

我是新手在python中使用SQL语句,我试过它,

 import sys, mysql.connector
 import mysql

 try:
     connection = mysql.connector.connect\
         (host = "localhost", user = "root", passwd ="", db = "local")
 except:
     print("No connection")
     sys.exit(0)

 cursor = connection.cursor()
 cursor.execute("SELECT name, price, description FROM table2_new WHERE 

我真的不知道如何继续。我搜索了类似的任务,但没有完全理解如何在Python中完成它。

表1中所需的输出,价格应该更新:

    +------+--------+---------------+--------+-----------+
    | "id" | "name" | "price" | "description" | "country" |
    +------+--------+---------------+--------+-----------+
    | "1"  | "a"    | "5"     | "Lord "       | "US"      |
    | "2"  | "b"    | "6"     | "Taker"       | "UK"      |
    +------+--------+---------------+--------+-----------+
你可以帮帮我吗?任何反馈都表示赞赏。

3 个答案:

答案 0 :(得分:1)

尝试;

update table_1 a
join table_2 b
on a.`name` = b.`name` and a.`description` = b.`description`
set a.`price` = b.`price`

演示sqlfiddle

queryprice更新table_1 price table_2 description namevar myDate = new Date(sheet.getRange(3,1).getValue()); var year = Utilities.formatDate(myDate, "Europe/Amsterdam", 'dd-MM-yyyy'); var weekyear = Utilities.formatDate(myDate, "Europe/Amsterdam", 'dd-MM-YYYY'); var week = Utilities.formatDate(myDate, "Europe/Amsterdam", 'w'); 匹配。 (要注意不止一场不会给出你期望的结果的比赛)

答案 1 :(得分:1)

你的SQL查询将是:

UPDATE t1
SET t1.name = t2.name
from table1 as t1
inner join table2 as t2
on t1.id = t2.id
AND t1.name != t2.name

然后对每个字段重复。

答案 2 :(得分:1)

首先,你的表绑定哪个字段(-s)?我们将其命名为bind_field。如果有多个字段,那么它将是bind_field1bind_field2和其他字段。您的查询:

UPDATE table1 t1
INNER JOIN table2 t2
ON t1.bind_field = t2.bind_field [AND t1.bind_field1 = t2.bind_field2 ...]
SET t1.name = t2.name, t1.price = t2.price, t1.description = t2.description

查询更新了name的{​​{1}},pricedescription字段,table1的值仅适用于具有相同table2的行(-s,如果有多个绑定字段)。

bind_field语句允许您绑定表的方式。 ON语句允许您控制更新值。

在我看来,你使用带有id的文本(SET或相同的)类型字段。如果是这样,那么您应该将其更改为数字类型字段,如VARCHAR;

P.S。对不起我的英文:)