Python MySQL SELECT WHERE 列表

Python MySQL SELECT WHERE with list

我有以下 Python MySQL 代码。

cursor = mydb.cursor()

cursor.execute('SELECT id FROM table1 WHERE col1=%s AND col2=%s', (val1, val2))
ids = cursor.fetchall()

for id in ids:
    cursor.execute('SELECT record_key FROM table2 WHERE id=%s limit 1', (id[0], ))
    record_keys = cursor.fetchall()
    print(record_keys[0][0])

如何提高效率?我正在使用 5.5.60-MariaDB 和 Python 2.7.5。我在 table1 中有大约 3.5 亿个条目,在 table2 中有 1500 万个条目。

幸运的是,您可以使用 LEFT JOIN 在单个查询中执行此操作。

cursor = mydb.cursor()

cursor.execute(
    "SELECT t1.id, t2.record_key FROM table1 t1 "
    "LEFT JOIN table2 t2 ON (t1.id = t2.id) "
    "WHERE t1.col1=%s AND t2.col2=%s",
    (val1, val2),
)
for id, record_key in cursor.fetchall():
    pass  # do something...