【发布时间】:2014-01-13 10:17:47
【问题描述】:
我需要查询数据库进行一些数据分析,我有超过 2000 万条记录。我对数据库的访问受到限制,并且我的查询在 8 分钟后超时。因此,我正在尝试将查询分解为更小的部分,并将结果保存到 Excel 以供以后处理。
这是我目前所拥有的。如何让 python 在每个 x 数(例如 1,000,000)条记录上循环查询并将它们存储在同一个 csv 中,直到搜索到所有(20 mil++)记录?
import MySQLdb
import csv
db_main = MySQLdb.connect(host="localhost",
port = 1234,
user="user1",
passwd="test123",
db="mainDB")
cur = db_main .cursor()
cur.execute("SELECT a.user_id, b.last_name, b.first_name,
FLOOR(DATEDIFF(CURRENT_DATE(), c.birth_date) / 365) age,
DATEDIFF(b.left_date, b.join_date) workDays
FROM users a
INNER JOIN users_signup b ON a.user_id a = b.user_id
INNER JOIN users_personal c ON a.user_id a = c.user_id
INNER JOIN
(
SELECT distinct d.a.user_id FROM users_signup d
WHERE (user_id >=1 AND user_id <1000000)
AND d.join_date >= '2013-01-01' and d.join_date < '2014-01-01'
)
AS t ON a.user_id = t.user_id")
result=cur.fetchall()
c = csv.writer(open("temp.csv","wb"))
for row in result:
c.writerow(row)
【问题讨论】:
-
也许尝试使用 LIMIT 和 OFFSET with sql 查询?