Hướng dẫn convert sql to csv python - chuyển đổi sql sang csv python

Tôi có một tệp SQL lớn [20 GB] mà tôi muốn chuyển đổi thành CSV. Tôi dự định tải tập tin vào Stata để phân tích. Tôi có đủ RAM để tải toàn bộ tệp [máy tính của tôi có 32GB trong RAM]

Vấn đề là: Các giải pháp tôi tìm thấy trực tuyến với Python cho đến nay [SQLite3] dường như đòi hỏi nhiều RAM hơn hệ thống hiện tại của tôi phải:

  • Đọc SQL
  • Viết CSV

Đây là mã

import sqlite3
import pandas as pd

con=sqlite3.connect['mydata.sql']
query='select * from mydata'
data=pd.read_sql[query,con]
data.to_csv['export.csv']
con.close[]

Tệp SQL chứa khoảng 15 biến có thể là dấu thời gian, chuỗi hoặc giá trị số. Không có gì thực sự lạ mắt.

Tôi nghĩ rằng một giải pháp khả thi có thể là đọc SQL và viết tệp CSV một dòng tại một thời điểm. Tuy nhiên, tôi không biết làm thế nào để làm điều đó [trong R hoặc trong Python]

Bất kỳ trợ giúp thực sự đánh giá cao!

Đã hỏi ngày 1 tháng 11 năm 2015 lúc 20:47Nov 1, 2015 at 20:47

ℕʘʘḇḽḙℕʘʘḇḽḙℕʘʘḆḽḘ

17.8K32 Huy hiệu vàng118 Huy hiệu bạc216 Huy hiệu đồng32 gold badges118 silver badges216 bronze badges

5

Bạn có thể đọc cơ sở dữ liệu SQL theo các đợt và viết chúng vào tệp thay vì đọc toàn bộ cơ sở dữ liệu cùng một lúc. Tín dụng cho cách thêm dữ liệu gấu trúc vào tệp CSV hiện có? Để biết cách thêm vào tệp CSV hiện có.

import sqlite3
import pandas as pd

# Open the file
f = open['output.csv', 'w']
# Create a connection and get a cursor
connection = sqlite3.connect['mydata.sql']
cursor = connection.cursor[]
# Execute the query
cursor.execute['select * from mydata']
# Get data in batches
while True:
    # Read the data
    df = pd.DataFrame[cursor.fetchmany[1000]]
    # We are done if there are no data
    if len[df] == 0:
        break
    # Let's write to the file
    else:
        df.to_csv[f, header=False]

# Clean up
f.close[]
cursor.close[]
connection.close[]

Đã trả lời ngày 1 tháng 11 năm 2015 lúc 21:34Nov 1, 2015 at 21:34

Cho đến Hoffmanntill HoffmannTill Hoffmann

9.0096 Huy hiệu vàng42 Huy hiệu bạc62 Huy hiệu Đồng6 gold badges42 silver badges62 bronze badges

4

Sử dụng chương trình dòng lệnh SQLite3 như thế này từ dòng Windows CMD hoặc Unix Shell:

sqlite3 -csv "mydata.sql" "select * from mydata;" > mydata.csv

Nếu mydata.sql không nằm trong thư mục hiện tại, hãy sử dụng đường dẫn và trên Windows, hãy sử dụng dấu gạch chéo chuyển tiếp thay vì dấu gạch chéo ngược.

Thay phiên chạy SQLite3

sqlite3

và nhập các lệnh này tại dấu nhắc SQLite:

.open "mydata.sql"
.ouptut mydata.csv
.mode csv
select * from mydata;
.quit

[hoặc đặt chúng vào một tệp gọi là run, giả sử và sử dụng

import sqlite3
import pandas as pd

# Open the file
f = open['output.csv', 'w']
# Create a connection and get a cursor
connection = sqlite3.connect['mydata.sql']
cursor = connection.cursor[]
# Execute the query
cursor.execute['select * from mydata']
# Get data in batches
while True:
    # Read the data
    df = pd.DataFrame[cursor.fetchmany[1000]]
    # We are done if there are no data
    if len[df] == 0:
        break
    # Let's write to the file
    else:
        df.to_csv[f, header=False]

# Clean up
f.close[]
cursor.close[]
connection.close[]
0.

Đã trả lời ngày 1 tháng 11 năm 2015 lúc 23:03Nov 1, 2015 at 23:03

G. Grothendieckg. GrothendieckG. Grothendieck

242K16 Huy hiệu vàng196 Huy hiệu bạc330 Huy hiệu đồng16 gold badges196 silver badges330 bronze badges

2

Tải tệp

import sqlite3
import pandas as pd

# Open the file
f = open['output.csv', 'w']
# Create a connection and get a cursor
connection = sqlite3.connect['mydata.sql']
cursor = connection.cursor[]
# Execute the query
cursor.execute['select * from mydata']
# Get data in batches
while True:
    # Read the data
    df = pd.DataFrame[cursor.fetchmany[1000]]
    # We are done if there are no data
    if len[df] == 0:
        break
    # Let's write to the file
    else:
        df.to_csv[f, header=False]

# Clean up
f.close[]
cursor.close[]
connection.close[]
1 trong cơ sở dữ liệu MySQL và xuất nó dưới dạng CSV.

Commans để tải tệp kết xuất MySQL trong cơ sở dữ liệu MySQL.

Tạo cơ sở dữ liệu MySQL

create database 

mysqldump -u root -p  < dumpfilename.sql

Lệnh xuất bảng MySQL dưới dạng CSV

mysql -u root -p
use 

SELECT * INTO OUTFILE 'file.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
FROM ;

Đã trả lời ngày 2 tháng 11 năm 2015 lúc 18:57Nov 2, 2015 at 18:57

VivekvivekVivek

3571 Huy hiệu bạc18 Huy hiệu đồng1 silver badge18 bronze badges

MySQL đổ vào CSV

Tiểu sử

Một tập lệnh Python cùng nhau bị hack nhanh chóng để biến các tệp mysqldump thành các tệp CSV. Tối ưu hóa cho các kết xuất cơ sở dữ liệu Wikipedia.

Các bãi chứa MySQL lớn cực kỳ có thể khó hoặc không thể nhập vào phần cứng khá hạn chế. Điều khó chịu về một bãi rác MySQL là cách thực tế duy nhất để thao túng nó là thông qua MySQL, về cơ bản đòi hỏi phải nâng cấp phần cứng nên người ta muốn làm việc với các bãi lớn như các bãi chứa Wikipedia MySQL.

Sẽ không tuyệt vời nếu có một số cách để chuyển đổi định dạng kết xuất MySQL [đó là một loạt các câu lệnh chèn] thành một định dạng phổ quát ... như ... CSV?

Vâng, bây giờ có.

Kịch bản Python ngắn này tận dụng thực tế là cấu trúc của câu lệnh INSQL INSERT không quá khác biệt so với CSV và sử dụng trình phân tích cú pháp Python CSV [trước và sau một số văn bản gây tranh cãi] để biến tệp kết xuất MySQL thành CSV.

Cách sử dụng

Chỉ cần chạy

import sqlite3
import pandas as pd

# Open the file
f = open['output.csv', 'w']
# Create a connection and get a cursor
connection = sqlite3.connect['mydata.sql']
cursor = connection.cursor[]
# Execute the query
cursor.execute['select * from mydata']
# Get data in batches
while True:
    # Read the data
    df = pd.DataFrame[cursor.fetchmany[1000]]
    # We are done if there are no data
    if len[df] == 0:
        break
    # Let's write to the file
    else:
        df.to_csv[f, header=False]

# Clean up
f.close[]
cursor.close[]
connection.close[]
2 theo sau là tên tệp của tệp SQL. Bạn có thể chỉ định nhiều tệp SQL và tất cả chúng sẽ được nối thành một tệp CSV. Kịch bản này cũng có thể lấy các tệp SQL từ đầu vào tiêu chuẩn, có thể hữu ích cho việc biến kết xuất MySQL GZIPPED thành tệp CSV mà không cần giải nén kết xuất MySQL.

import sqlite3
import pandas as pd

# Open the file
f = open['output.csv', 'w']
# Create a connection and get a cursor
connection = sqlite3.connect['mydata.sql']
cursor = connection.cursor[]
# Execute the query
cursor.execute['select * from mydata']
# Get data in batches
while True:
    # Read the data
    df = pd.DataFrame[cursor.fetchmany[1000]]
    # We are done if there are no data
    if len[df] == 0:
        break
    # Let's write to the file
    else:
        df.to_csv[f, header=False]

# Clean up
f.close[]
cursor.close[]
connection.close[]
3

Làm thế nào nó hoạt động

SQL sau:

INSERT INTO `page` VALUES [1,0,'April','',1,0,0,0.778582929065,'20140312223924','20140312223929',4657771,20236,0],
[2,0,'August','',0,0,0,0.123830928525,'20140312221818','20140312221822',4360163,11466,0];

được biến thành CSV sau:

1,0,April,1,0,0,0.778582929065,20140312223924,20140312223929,4657771,20236,0
2,0,August,0,0,0,0.123830928525,20140312221818,20140312221822,4360163,11466,0

Không quá khó để xem những gì đang diễn ra, nhưng bạn chắc chắn có thể nhìn vào mã nguồn để xem chính xác cách chuyển đổi được thực hiện.

Làm

  • Một loạt các bài kiểm tra đơn vị nghiêm ngặt, chứng minh rằng điều này hoạt động trên một tập hợp các tệp kết xuất MySQL đa dạng mà không có bất kỳ tác dụng phụ nào
  • Một số tài liệu khác
  • Một giải pháp cho một lỗi trong đó một cột là một chuỗi kết thúc trong
    import sqlite3
    import pandas as pd
    
    # Open the file
    f = open['output.csv', 'w']
    # Create a connection and get a cursor
    connection = sqlite3.connect['mydata.sql']
    cursor = connection.cursor[]
    # Execute the query
    cursor.execute['select * from mydata']
    # Get data in batches
    while True:
        # Read the data
        df = pd.DataFrame[cursor.fetchmany[1000]]
        # We are done if there are no data
        if len[df] == 0:
            break
        # Let's write to the file
        else:
            df.to_csv[f, header=False]
    
    # Clean up
    f.close[]
    cursor.close[]
    connection.close[]
    
    4 và cột tiếp theo là một chuỗi bắt đầu trong
    import sqlite3
    import pandas as pd
    
    # Open the file
    f = open['output.csv', 'w']
    # Create a connection and get a cursor
    connection = sqlite3.connect['mydata.sql']
    cursor = connection.cursor[]
    # Execute the query
    cursor.execute['select * from mydata']
    # Get data in batches
    while True:
        # Read the data
        df = pd.DataFrame[cursor.fetchmany[1000]]
        # We are done if there are no data
        if len[df] == 0:
            break
        # Let's write to the file
        else:
            df.to_csv[f, header=False]
    
    # Clean up
    f.close[]
    cursor.close[]
    connection.close[]
    
    5. Logic chương trình hiện tại cho thấy các dấu ngoặc đơn sẽ bị tước bỏ.

Bài Viết Liên Quan

Chủ Đề