Hãy tưởng tượng bạn có một từ điển Python có giá trị khóa (hoặc danh sách) với số lượng lớn hơn các mục. Giả sử bạn đang đọc tệp JSON lớn hơn và bạn muốn lưu trữ nội dung của nó vào bảng MySQL bằng các khóa làm tên của các cột và giá trị dưới dạng giá trị.Cách hiệu quả nhất để chèn từ điển/danh sách Python vào cơ sở dữ liệu SQL là gì?
JSON Ví dụ:
"display_location": {
"city":"Bratislava",
"state_name":"Slovakia",
"country_iso3166":"SK",
"latitude":"48.20000076",
"longitude":"17.20000076",
}
Sau đó, nó là khá hiệu quả để viết SQL chèn như tay này:
INSERT INTO TABLE (city, state_name, country_iso3166, latitude, longitude) VALUES('%s','%s','%s','%s','%s')
% (Bratislava, Slovakia, SK, 48.20000076, 17.20000076);
(Vâng, đó là ok với năm giá trị, nhưng hãy tưởng tượng có những ví dụ lăm hàng trăm người trong số họ.)
Có bất kỳ lớp/phương thức Python nào để chèn SQL có hiệu quả và chuỗi ngắn không? Tôi đã viết đoạn mã này:
for key,value in list.iteritems():
value_type = type(value)
if value_type is unicode:
vars_to_sql.append(value.encode('ascii', 'ignore'))
keys_to_sql.append(key.encode('ascii', 'ignore'))
else:
vars_to_sql.append(value)
keys_to_sql.append(key)
keys_to_sql = ', '.join(keys_to_sql)
Sau đó chèn trông đơn giản hơn nhiều:
INSERT INTO conditions_bratislava(%s) VALUES %r" % (keys_to_sql, tuple(vars_to_sql),)
Có thể có hàng ngàn các giá trị và bạn vẫn sẽ ổn với tuyên bố một chèn này.
Lưu ý rằng điều kiện sẽ giải mã chuỗi Unicode, vì vậy bạn sẽ không có chữ "u" trước mỗi giá trị.
Vì vậy, có bất kỳ lớp học hoặc phương pháp hiệu quả hơn và chuẩn bị nào để chèn nhiều giá trị trong cùng một phương pháp đơn giản với chuỗi INSERT ngắn không?
Nếu bạn muốn sử dụng cơ sở dữ liệu quan hệ, có thể sử dụng PostgreSQL 9.2 sắp tới có kiểu dữ liệu JSON gốc. –