Bởi "Dữ liệu mới là danh sách x cột", tôi hình dung ý bạn là x
tuples , kể từ đó bạn tiếp tục nói về "tuple đầu tiên". Nếu Newdata
là danh sách các bộ giá trị, y = len(Newdata[0])
là số mục trong một trong những bộ giá trị đầu tiên.
Giả sử đó là số bạn muốn (và tất cả các bộ giá trị tốt hơn nên có cùng số mục, nếu không thì executemany
sẽ fail!), ý tưởng chung trong câu trả lời của @ Nathan là đúng:xây dựng chuỗi với số lượng dấu hỏi được phân tách bằng dấu phẩy thích hợp:
holders = ','.join('?' * y)
sau đó chèn nó vào phần còn lại của câu lệnh SQL. Cách chèn của @ Nathan phù hợp với hầu hết mọi phiên bản Python 2. nhưng nếu bạn có phiên bản 2.6 trở lên,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
hiện đang được ưa thích (nó cũng hoạt động trong Python 3.any).
Cuối cùng,
csr.executemany(sql, Newdata)
sẽ làm được những gì bạn mong muốn. Hãy nhớ thực hiện giao dịch sau khi bạn hoàn tất! -)