【问题标题】:How to get all data in CSV from a remote MySQL host using Python?如何使用 Python 从远程 MySQL 主机获取 CSV 中的所有数据?
【发布时间】:2015-12-21 09:26:48
【问题描述】:

我知道如果使用 mysqldump 或 SELECT *INTO OUTFILE.. 方法将所有数据从 MySQL 数据库获取到本地目录相当容易,但是如何使用 Python 和远程 MySQL 主机实现类似的。

远程位置没有服务器目录,因此无法将其转储到服务器上。我需要将 csv 直接下载到我的计算机上。

【问题讨论】:

标签: python mysql


【解决方案1】:

考虑使用csv 模块和pandas 模块遍历所有表并将行和列写入外部csv 文件(保存为表名)的两种方法之一。两者都使用pymysql 包远程连接到 MySQL,但任何 MySQL 数据库 API 都可以工作。

CSV 模块

import os
import csv
import pymysql

# CURRENT DIRECTORY OF SCRIPT
cd = os.path.dirname(os.path.abspath(__file__))

# OPEN DATABASE CONNECTION
db = pymysql.connect(host="localhost", port=####, db="databasename",
                     user="username", passwd="*****") 
cur = db.cursor() 
# OBTAIN ALL TABLES
cur.execute("SHOW TABLES;")
tables = cur.fetchall()            

for t in tables:
    columns = []
    cur.execute("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS \
                 WHERE table_name = '{0}';".format(t[0]))        

    with open(os.path.join(cd, '{0}.csv'.format(t[0])), 'w', newline='') as f:
        writer = csv.writer(f)
        # COLUMNS    
        for col in cur.fetchall():
            columns.append(col[0])  
        writer.writerow(columns)    

        # ROWS
        cur.execute("SELECT * FROM {0};".format(t[0]))            
        for row in cur.fetchall():
            writer.writerow(row)
    f.close()
# CLOSE CURSOR AND DATABASE CONNECTION    
cur.close()
db.close()

熊猫模块

import os
import pandas as pd
import pymysql

cd = os.path.dirname(os.path.abspath(__file__))

# OPEN DATABASE CONNECTION
db = pymysql.connect(host="localhost", port=####, db="databasename",
                     user="username", passwd="*****") 
cur = db.cursor() 
# OBTAIN ALL TABLES
cur.execute("SHOW TABLES;")
tables = cur.fetchall()            

for t in tables:
    columns = []
    # IMPORT DATA TO DATA FRAME 
    df = pd.read_sql("SELECT * FROM {0};".format(t[0]), db)

    # EXPORT DATA FRAME TO CSV
    df.to_csv(os.path.join(cd, '{0}.csv'.format(t[0])), index=False)

# CLOSE CURSOR AND DATABASE CONNECTION    
cur.close()
db.close()

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 2011-12-10
    • 2020-12-23
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多