Trong phần đầu về xuất tập dữ liệu lớn, chúng ta sẽ thấy một số cách thực hiện và bây giờ là lúc để xem cách thực hiện với Python
Kết nối với MySQL từ Python
Trước khi tiếp tục, bạn có thể đọc tại đây cách kết nối với MySQL từ Python, nơi bạn cũng sử dụng một lớp mà tôi dùng để kết nối vì lớp này làm những gì tôi thích. Nhưng với lối vào này, mình sẽ kết nối trực tiếp với MySQL bằng thư viện PyMySQL
Bạn chỉ cần nhập thư viện, thiết lập thông tin chính xác cho kết nối và… là xong
import pymysql conn = pymysql.connect[host='localhost', port=3306, user='root', passwd='pass', db=''] print ['Conected!'] conn.close[]
Để đếm thời gian, tôi đã tạo lớp học của riêng mình
import time class Cronometro[]: def __init__[self, tarea = '']: self.__inicio = time.time[] self.tarea = tarea def iniciar[self]: # Tiempo de inicio de ejecución. self.__inicio = time.time[] def finalizar[self]: # Devolvemos el tiempo de ejecución. tmp = time.time[] tmp2 = self.__inicio self.__inicio = tmp x = self.tarea + ' --> ' if len[self.tarea] > 0 else '' return x + str[round[tmp - tmp2,2]] + " segundos"
Phải làm gì khi truy xuất hàng nghìn và hàng nghìn hàng
Máy khách MySQL, chẳng hạn như PyMySQL, hoạt động rất tốt để kết nối với cơ sở dữ liệu. sau khi thực hiện một câu truy vấn, kết quả được lưu vào bộ nhớ, trước khi trao lại quyền điều khiển cho chương trình [sau khi công việc cơ sở dữ liệu kết thúc]. Nhưng khi bộ đệm quá lớn, hiệu suất sẽ giảm xuống. Tại đây, bạn có thể đọc sự cố và giải pháp bằng cách sử dụng “bộ kết quả phát trực tuyến“, với việc sử dụng các con trỏ chẳng hạn như SSCursor
Trong PyMySQL, bạn có thể truy cập vào các con trỏ như thế này
cur = conn.cursor[pymysql.cursors.SSCursor]
Tiếp theo, điều rất quan trọng là tìm nạp từng hàng [fetchone] thay vì tất cả cùng một lúc [fetchall]
Quy trình xuất dữ liệu sang CSV
Nếu bạn muốn xuất bản ghi sang CSV, thì [tôi nghĩ] bắt buộc phải sử dụng gói CSV. Hướng dẫn tốt nhất bạn có thể làm theo để sử dụng nó là. http. //www. trăn cho người mới bắt đầu. com/lập trình hệ thống/sử dụng-the-csv-module-in-python/. Đối với nhu cầu của tôi, tôi chỉ cần mở tệp để viết, liên kết tệp đó với gói csv, sử dụng csv. writerow để viết và sau khi hoàn thành, hãy đóng tệp
ofile = open[file_name,'wb'] csv_writer = csv.writer[ofile, delimiter=delimiter, quotechar=quotechar,quoting=quoting] csv_writer.writerow[datos] ofile.close[]
Trình ghi CSV có một số tùy chọn, vì vậy hãy nhớ đặt tùy chọn bạn cần
Trước khi tiếp tục, sẽ rất hữu ích nếu bạn đọc câu hỏi này trên StackOverflow về cách lưu trữ tập bản ghi [trong trường hợp này là sử dụng SQLite] dưới dạng tệp CSV và bạn có manh mối chính xác cho câu trả lời đầu tiên
Bây giờ, chúng ta đã có quy trình sẵn sàng và mã là thế này
def write_sql_to_file[file_name, sql, with_header=True, delimiter=',',quotechar='"',quoting=csv.QUOTE_NONNUMERIC, con_sscursor=False]: cur = conn.cursor[pymysql.cursors.SSCursor] if con_sscursor else conn.cursor[] cur.execute[sql] cabecera= [campo[0] for campo in cur.description] ofile = open[file_name,'wb'] csv_writer = csv.writer[ofile, delimiter=delimiter, quotechar=quotechar,quoting=quoting] if with_header: csv_writer.writerow[cabecera] if con_sscursor: while True: x = cur.fetchone[] if x: csv_writer.writerow[x] else: break else: for x in cur.fetchall[]: csv_writer.writerow[x] cur.close[] ofile.close[]
Tôi đã chuẩn bị một truy vấn để xuất một lượng lớn dữ liệu, vì vậy, hãy xem thời gian sử dụng SSCursor và không có SScursor. Tôi đã chèn đồng hồ bấm giờ vào hai điểm để xem hiệu suất. một dành cho thời gian truy vấn và một dành cho việc tạo tệp CSV
Kết quả, đối với cùng một truy vấn, nhưng tăng lượng dữ liệu cần xuất là
Kết luận, lấy tập bản ghi bằng SSCursor nhanh hơn so với việc không sử dụng nó, nhưng tệp CSV được ghi nhanh hơn bằng cách tìm nạp thay vì tìm nạp từng cái một. Tôi cần tiếp tục điều tra về vấn đề này
Giả sử bạn muốn xuất bảng sau [được gọi là 'dbo. product‘ table] từ SQL Server sang CSV bằng Python
product_idproduct_nameprice1Máy tính8002TV12003Máy in1504Bàn4005Ghế1206Máy tính bảng300Dưới đây là các bước mà bạn có thể làm theo
Các bước để xuất Bảng máy chủ SQL sang CSV bằng Python
Bước 1. Cài đặt gói Pyodbc
Nếu bạn chưa làm như vậy, hãy cài đặt gói pyodbc bằng lệnh bên dưới [trong Windows]
pip install pyodbc
Bạn có thể kiểm tra hướng dẫn sau để biết hướng dẫn cài đặt gói trong Python bằng cách sử dụng pip
Bước 2. Kết nối Python với máy chủ SQL
Có một số mục mà bạn có thể truy xuất trước khi kết nối Python với SQL Server, bao gồm
- Tên máy chủ
- Tên cơ sở dữ liệu
Ví dụ: giả sử rằng chúng tôi được cung cấp thông tin bên dưới
- Tên máy chủ là. RON\SQLEXPRESS
- Tên cơ sở dữ liệu là. test_database
Do đó, mã để kết nối Python với SQL Server sẽ như sau [lưu ý rằng bạn sẽ cần điều chỉnh mã để phản ánh thông tin cơ sở dữ liệu và máy chủ của mình]
import pyodbc conn = pyodbc.connect['Driver={SQL Server};' 'Server=RON\SQLEXPRESS;' 'Database=test_database;' 'Trusted_Connection=yes;']
Bạn có thể xem lại hướng dẫn sau để biết các bước hoàn chỉnh để kết nối Python với SQL Server
Bước 3. Xuất bảng máy chủ SQL sang CSV bằng Python
Đối với bước cuối cùng, bạn có thể sử dụng gói Pandas để xuất bảng từ SQL Server sang CSV
Có thể bạn sẽ cần
- Để cài đặt gói Pandas nếu bạn chưa cài đặt. Bạn có thể cài đặt gói Pandas bằng lệnh này. pip cài đặt gấu trúc
- Truy vấn để lấy kết quả được xuất. Ví dụ của chúng tôi, truy vấn là. chọn * từ test_database. dbo. sản phẩm
- Đường dẫn nơi tệp CSV sẽ được lưu. Ví dụ của chúng tôi, đường dẫn là. C. \Users\Ron\Desktop\exported_data. csv
Khi bạn đã truy xuất thông tin trên, bạn sẽ cần thêm cú pháp sau vào mã
import pandas as pd sql_query = pd.read_sql_query[''' select * from test_database.dbo.product ''' ,conn] # here, the 'conn' is the variable that contains your database connection information from step 2 df = pd.DataFrame[sql_query] df.to_csv [r'C:\Users\Ron\Desktop\exported_data.csv', index = False] # place 'r' before the path name
Đặt tất cả các thành phần lại với nhau
________số 8Chạy mã bằng Python [được điều chỉnh theo đường dẫn và thông tin kết nối cơ sở dữ liệu của bạn] và tệp CSV của bạn sẽ được xuất sang vị trí đã chỉ định
Khi bạn mở tệp, bạn sẽ thấy dữ liệu này
product_idproduct_nameprice1Máy tính8002TV12003Máy in1504Bàn4005Ghế1206Máy tính bảng300Bạn cũng có thể muốn xem hướng dẫn sau để biết các bước nhập tệp CSV vào SQL Server bằng Python