Câu trả lời cho câu hỏi ban đầu của bạn là: Không, bạn không thể chèn danh sách như thế.
Tuy nhiên, với một số tinh chỉnh, bạn có thể làm mà công việc mã bằng cách sử dụng %r
và đi qua trong một tuple:
variable_1 = "HELLO"
variable_2 = "ADIOS"
varlist = [variable_1, variable_2]
print "INSERT INTO table VALUES %r;" % (tuple(varlist),)
Thật không may, mà phong cách của chèn biến lá mã của bạn dễ bị tổn thương để SQL injection attacks.
Thay vào đó, chúng tôi khuyên bạn sử dụng Python's DB API và xây dựng một chuỗi truy vấn tùy biến với nhiều dấu hỏi cho các dữ liệu được chèn vào:
variable_1 = "HELLO"
variable_2 = "ADIOS"
varlist = [variable_1,variable_2]
var_string = ', '.join('?' * len(varlist))
query_string = 'INSERT INTO table VALUES (%s);' % var_string
cursor.execute(query_string, varlist)
Ví dụ vào đầu của SQLite3 docs cho thấy làm thế nào để vượt qua đối số bằng cách sử dụng câu hỏi nhãn hiệu và nó giải thích lý do tại sao chúng là cần thiết (về cơ bản, nó đảm bảo trích dẫn chính xác các biến của bạn).
Nguồn
2011-11-29 18:59:42
Nói chung, nếu bạn có một thông báo lỗi, bạn nên bao gồm nó trong câu hỏi. –
tại sao không sử dụng redis? Nếu sử dụng mô-đun ast và redis-py, u có thể viết một danh sách để redis.eg.r.set (a, [1,23,3]) khi bạn cần đối tượng này, bạn có thể sử dụng b = ast.literal_eval (r.get (a)) để có được danh sách –