Tôi đang sử dụng Python và mô-đun MySQLdb của nó để nhập một số dữ liệu đo lường vào cơ sở dữ liệu Mysql. Lượng dữ liệu mà chúng tôi có khá cao (hiện tại khoảng ~ 250 MB tệp csv và còn nhiều dữ liệu khác nữa).Python + MySQLdb executemany
Hiện tại tôi sử dụng cursor.execute (...) để nhập một số siêu dữ liệu. Điều này không có vấn đề vì chỉ có một vài mục nhập cho các mục này.
Vấn đề là khi tôi cố gắng sử dụng cursor.executemany() để nhập khẩu số lượng lớn các dữ liệu đo thực tế, MySQLdb đặt ra một
TypeError: not all arguments converted during string formatting
mã hiện tại của tôi là
def __insert_values(self, values):
cursor = self.connection.cursor()
cursor.executemany("""
insert into values (ensg, value, sampleid)
values (%s, %s, %s)""", values)
cursor.close()
nơi values
là danh sách các bộ chứa ba chuỗi. Bất kỳ ý tưởng gì có thể sai với điều này?
Edit:
Các giá trị được tạo ra bởi
yield (prefix + row['id'], row['value'], sample_id)
và sau đó đọc vào một danh sách một ngàn tại một thời điểm nơi hàng là và iterator đến từ csv.DictReader
.
Bạn đã xác minh rằng các giá trị chứa đúng dữ liệu phải không? Ngoài ra, bạn nên xem xét việc sử dụng LOAD DATA INFILE LOCILE. Nó có thể nhanh hơn rất nhiều. –
Vấn đề là dữ liệu cần phải được xử lý trước (hiện đang được thực hiện trong cùng một tập lệnh python) và không thể tạo ra các bản sao dự phòng của các tập dữ liệu lớn như vậy. Các giá trị phải là ok khi tôi kiểm tra với trình gỡ rối. – lhahne