Python:将大型SQL Server查询结果导出到.txt文件

时间:2018-04-07 03:01:26

标签: python sql sql-server bigdata pyodbc

复制>的SQL Server查询结果的性能效率最高,内存效率最高的方法是什么? 600,000,000行到本地.txt文件?您可能认为我没有从SQL Server Management Studio导出的用户权限。出于这个原因,Python似乎是我最好的选择。

我目前正在使用Python pyodbc包:

connection = pyodbc.connect('Driver=DRIVER;' \
                            'Server=SERVER;' \
                            'Database=DATABASE;' \
                            'uid=USERNAME;' \
                            'pwd=PASSWORD')

cursor = connection.cursor()
try:
    cursor.execute("SELECT * FROM %s" % table)
except:
    print('===== WAITING ===== EXECUTE ERROR =====')
    time.sleep(15)
    cursor.execute("SELECT * FROM %s" % table)

try:
    data = cursor.fetchall()
except:
    print('===== WAITING ===== FETCH ERROR =====')
    time.sleep(15)
    data = cursor.fetchall()

with open(output_file, 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, delimiter=delimiter)
    writer.writerow([x[0] for x in cursor.description])  # column headers
    for row in data:
        writer.writerow(row)
cursor.close()

附注:我的目标是将数百个SQL表作为.txt文件传输到Amazon S3存储桶。有没有更好的方法,而不是将文件下载到本地驱动器,然后上传到S3?

1 个答案:

答案 0 :(得分:1)

这取决于结果集,但作为一般规则,我使用fetch_rows = 1000 rows = cursor.fetchmany(fetch_rows) while rows is not None: for row in rows: do_something() row = cursor.fetchmany(fetch_rows) 一次抓取一堆行而不是将所有内容都拉入内存:

{{1}}
祝你好运!