2010-06-18 41 views
6

Tôi làm cách nào để tạo một lược đồ bảng MYSQL kiểm tra tệp Excel (hoặc CSV). Có thư viện Python sẵn sàng nào cho tác vụ không?Tạo lược đồ bảng kiểm tra Excel (CSV) và nhập dữ liệu

Tiêu đề cột sẽ được vệ sinh thành tên cột. Kiểu dữ liệu sẽ được ước tính dựa trên nội dung của cột bảng tính. Khi hoàn tất, dữ liệu sẽ được tải vào bảng.

Tôi có tệp Excel gồm ~ 200 cột mà tôi muốn bắt đầu chuẩn hóa.

+0

Một số ý tưởng khác: http://stackoverflow.com/q/9998596/395857 –

Trả lời

1

Chỉ cần để tham khảo (của tôi), tôi ghi lại dưới đây những gì tôi đã làm:

  1. XLRD là thực tiễn, tuy nhiên tôi đã chỉ lưu dữ liệu Excel như CSV, vì vậy tôi có thể sử dụng LOAD DATA INFILE
  2. tôi đã sao chép hàng đầu tiên và bắt đầu sáng tác nhập khẩu và bình thường hóa kịch bản
  3. script thực hiện: CREATE TABLE với tất cả các cột như TEXT, trừ tiểu học then chốt mysql
  4. truy vấn: LOAD DATA LOCAL INFILE tải toàn bộ dữ liệu CSV vào các lĩnh vực TEXT.
  5. dựa trên đầu ra của PROCEDURE ANALYSE, tôi có thể ALTER TABLE để cung cấp cho các cột đúng loại và độ dài. PROCEDURE ANALYSE trả về ENUM cho bất kỳ cột nào có vài giá trị khác biệt, không phải là những gì tôi cần, nhưng tôi thấy hữu ích sau này để chuẩn hóa. 200 bóng mắt thật dễ dàng với PROCEDURE ANALYSE. Đầu ra từ PhpMyAdmin đề xuất cấu trúc bảng là rác.
  6. Tôi đã viết một số chuẩn hóa chủ yếu bằng cách sử dụng SELECT DISTINCT trên các cột và INSERT nhập kết quả vào các bảng riêng biệt. Tôi đã thêm vào bảng cũ một cột cho FK đầu tiên. Ngay sau số INSERT, tôi đã có ID và UPDATE chỉnh sửa cột FK. Khi vòng lặp hoàn thành, tôi đã bỏ cột cũ chỉ để lại cột FK. Tương tự với nhiều cột phụ thuộc. Đó là nhanh hơn nhiều so với tôi mong đợi.
  7. Tôi đã chạy (django) python manage.py inspctdb, sao chép kết quả đầu ra thành models.py và thêm tất cả những ForeignkeyField giây đó vì FK không tồn tại trên MyISAM. Viết một chút views.py python, urls.py, vài mẫu ... TADA
1

workaround Nhanh chóng và bẩn với phpmyadmin:

  • Tạo một bảng với số tiền phải của cột. Đảm bảo dữ liệu phù hợp với các cột.
  • Nhập CSV vào bảng.
  • Sử dụng cấu trúc bảng đề xuất.
+1

Được rồi, PhpMyAdmin có: "SELECT * FROM table_name PROCEDURE ANALYZE()". Điều này có thể giúp tôi. http://dev.mysql.com/doc/refman/5.0/en/procedure-analyse.html –

1

Theo như tôi biết, không có công cụ nào có thể tự động hóa quy trình này (tôi rất thích ai đó chứng minh tôi sai vì tôi đã gặp sự cố chính xác này trước đây). Khi tôi thực hiện việc này, tôi đã đưa ra hai tùy chọn:
(1) Tạo thủ công các cột trong db với các loại thích hợp và sau đó nhập hoặc
(2) Viết một số loại bộ lọc có thể "tìm ra" những loại dữ liệu nào nên là cột. Tôi đã đi với tùy chọn đầu tiên chủ yếu là bởi vì tôi không nghĩ rằng tôi thực sự có thể viết một chương trình để làm suy luận kiểu.
Nếu bạn quyết định viết công cụ/chuyển đổi loại, đây là một số vấn đề mà bạn có thể phải giải quyết:
(1) Ngày thực sự được lưu trữ là số ngày kể từ ngày 31 tháng 12 năm 1899; làm thế nào để suy ra sau đó rằng một cột là ngày như trái ngược với một số mảnh của dữ liệu số (dân số ví dụ)?
(2) Đối với các trường văn bản, bạn chỉ cần tạo các cột kiểu varchar (n) trong đó n là mục nhập dài nhất trong cột đó, hoặc bạn làm cho nó thành một trường char không liên kết nếu một trong các mục dài hơn một số giới hạn? Nếu vậy, giới hạn trên tốt là gì?
(3) Làm thế nào để bạn tự động chuyển đổi một phao sang thập phân với độ chính xác chính xác và không mất bất kỳ địa điểm nào?
Rõ ràng, điều này không có nghĩa là bạn sẽ không thể (tôi là một lập trình viên khá xấu). Tôi hy vọng bạn làm, bởi vì nó sẽ là một công cụ thực sự hữu ích để có.

3

Sử dụng mô-đun xlrd; start here. [Disclaimer: Tôi là tác giả]. xlrd phân loại ô thành văn bản, số, ngày, boolean, lỗi, trống và trống. Nó phân biệt các ngày từ các con số bằng cách kiểm tra định dạng được liên kết với ô (ví dụ: "dd/mm/yyyy" so với "0,00").

Công việc lập trình một số mã để lội qua dữ liệu do người dùng nhập để quyết định loại dữ liệu DB nào sử dụng cho mỗi cột không phải là thứ có thể dễ dàng tự động. Bạn sẽ có thể nhãn cầu dữ liệu và gán các loại như số nguyên, tiền, văn bản, ngày, giờ, giờ, vv và viết mã để kiểm tra dự đoán của bạn. Lưu ý rằng bạn cần có khả năng đối phó với những thứ như dữ liệu số hoặc ngày được nhập vào các trường văn bản (có thể nhìn OK trong GUI). Bạn cần một chiến lược để xử lý các ô không phù hợp với kiểu dữ liệu "ước tính". Bạn cần xác thực và làm sạch dữ liệu của mình. Hãy chắc chắn rằng bạn chuẩn hóa các chuỗi văn bản (khoảng trắng trên đầu/cuối của dấu cách, thay thế nhiều khoảng trắng theo một khoảng trắng. Văn bản Excel là (chỉ BMP), không bash nó thành ASCII hoặc "ANSI" - hoạt động trong Unicode và mã hóa UTF-8 để đưa nó vào cơ sở dữ liệu của bạn.

Các vấn đề liên quan