1.工作中遇到的問題,客戶不懂數據庫,所以他想將鏡像文件中還原數據庫全部導出為CSV文件(EXCEL)
import pymysql import csv import os # 獲取表名 def from_mysql_get_all_tables_name(databases): conn = pymysql.connect( host=host, user=user, password=password, database=database, charset="utf8") cursor = conn.cursor() sql = 'SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = "{}";'.format(databases) cursor.execute(sql.encode('utf-8')) data = cursor.fetchall() # 獲取查詢的所有記錄 conn.close() return data # 數據 def from_mysql_get_all_info(table_name): conn = pymysql.connect( host=host, user=user, password=password, database=database, charset="utf8") cursor = conn.cursor() sql = "select * from {}".format(table_name) cursor.execute(sql.encode('utf-8')) data = cursor.fetchall() # 獲取查詢的所有記錄 conn.close() return data def from_mysql_get_all_column_name(databases, table_name): conn = pymysql.connect( host=host, user=user, password=password, database=database, charset="utf8") cursor = conn.cursor() sql = "select COLUMN_NAME from information_schema.`COLUMNS` where TABLE_SCHEMA = '{}' and TABLE_NAME = '{}'".format( databases, table_name) cursor.execute(sql.encode('utf-8')) data = cursor.fetchall() # 獲取查詢的所有記錄 conn.close() return data # 不加字段行 def write_csv(table_name, column_name, data): filename = 'D:/data/{}.csv'.format(table_name) # 文件名和路徑 path = 'D:/data' if not os.path.exists(path): os.mkdir(path) with open(filename, mode='w', encoding='utf-8', newline='') as f: write = csv.writer(f, dialect='excel') for item in data: write.writerow(item) # 加字段行 def column_write_csv(table_name, column_name, data): filename = 'D:/data/{}.csv'.format(table_name) # 文件名和路徑 path = 'D:/data' header = [] for row in column_name: colu = row[0] header.append(colu) if not os.path.exists(path): os.mkdir(path) with open(filename, mode='w', encoding='utf-8',newline='') as f: write = csv.writer(f, dialect='excel') write.writerow(header) for item in data: write.writerow(item) def main(): # 1.獲取該數據庫下所有表名 tables_name = from_mysql_get_all_tables_name(database) for row in tables_name: # 表名 table_name = row[0] # print(table_name) # 2.獲取該表下的所有字段名 column_name = from_mysql_get_all_column_name(database, table_name) # print(column_name) # 3.獲取該表的所有數據 data = from_mysql_get_all_info(table_name) # print(data) # 4.將數據寫入CSV column_write_csv(table_name, column_name, data) if __name__ == '__main__': # 0.填寫數據庫相關參數 database = "mysql" host = "127.0.0.1" user = "root" password = "root" main()