2010-01-19 32 views
37

Tôi có một danh sách đó có 3 hàng mỗi đại diện cho một dòng của bảng:Python và SQLite: chèn vào bảng

>>> print list 
[laks,444,M] 
[kam,445,M] 
[kam,445,M] 

Làm thế nào để chèn danh sách này vào một bảng?

cấu trúc bảng của tôi là:

 
tablename(name varchar[100], age int, sex char[1]) 

Hoặc tôi nên sử dụng một cái gì đó khác hơn là danh sách?

Dưới đây là phần mã thực tế:

for record in self.server: 
     print "--->",record 
     t=record 
     self.cursor.execute("insert into server(server) values (?)",(t[0],)); 
     self.cursor.execute("insert into server(id) values (?)",(t[1],)) 
     self.cursor.execute("insert into server(status) values (?)",(t[2],)); 

Chèn ba lĩnh vực làm việc riêng, nhưng sử dụng một dòng duy nhất như

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t[0],),(t[1],),(t[2],))

hoặc

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t),)

không làm.

+1

Hiện đã được sửa. Tôi đã sử dụng phương pháp sai này self.cursor.execute ("chèn vào giá trị máy chủ (máy chủ, c_id, trạng thái) (?,?,?)", (T [0],), (t [1],) , (t [2],)) phương pháp đúng là self.cursor.execute ("chèn vào giá trị máy chủ (máy chủ, c_id, trạng thái) (?,?,?)", (t [0], t [ 1], t [2],)) –

Trả lời

29
conn = sqlite3.connect('/path/to/your/sqlite_file.db') 
c = conn.cursor() 
for item in my_list: 
    c.execute('insert into tablename values (?,?,?)', item) 
+0

Cảm ơn Dyno và Dominic - Nhưng nó không hoạt động - đây là những gì tôi đang cố gắng ----------- \t cho bản ghi trong danh sách: \t in "--->", ghi lại \t cursor.execute ("chèn vào các giá trị quá trình (?,?,?)", bản ghi); ----------- gặp lỗi –

+0

@lakshmipathi - Bạn gặp phải lỗi gì? –

+0

Tôi đã thử, ngoại trừ một phần - thử một phần sẽ có cho vòng lặp và thực thi stmt và ngoại trừ một phần có thông báo duy nhất nói "chèn không thành công" ... nó chỉ in tin nhắn từ một phần và thoát. Làm cách nào để gỡ lỗi hiệu quả hơn? –

8

Phỏng theo http://docs.python.org/library/sqlite3.html:

# Larger example 
for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), 
      ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00), 
      ('2006-04-06', 'SELL', 'IBM', 500, 53.00), 
     ]: 
    c.execute('insert into stocks values (?,?,?,?,?)', t) 
62

có một cách tốt hơn

# Larger example 
rows = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), 
     ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00), 
     ('2006-04-06', 'SELL', 'IBM', 500, 53.00)] 
c.executemany('insert into stocks values (?,?,?,?,?)', rows) 
connection.commit() 
+0

Tôi có một truy vấn về điều này vì tôi đã thử nhưng tôi nhận được và lỗi nói rằng tôi có 6 cột và chỉ cung cấp thông tin cho 5.Điều này đúng nhưng cột thứ nhất là số nguyên pk và bạn không cần cung cấp giá trị đó. Có cách nào để vượt qua chuyện này không? - – Mike

+0

Đã tìm ra. Chỉ cần thêm các tiêu đề trường sau tên db như bình thường. – Mike

7

Không phải là một câu trả lời trực tiếp, nhưng đây là một chức năng để chèn một hàng với cặp cột có giá trị vào sqlite bảng:

def sqlite_insert(conn, table, row): 
    cols = ', '.join('"{}"'.format(col) for col in row.keys()) 
    vals = ', '.join(':{}'.format(col) for col in row.keys()) 
    sql = 'INSERT INTO "{0}" ({1}) VALUES ({2})'.format(table, cols, vals) 
    conn.cursor().execute(sql, row) 
    conn.commit() 

Ví dụ về sử dụng:

sqlite_insert(conn, 'stocks', { 
     'created_at': '2016-04-17', 
     'type': 'BUY', 
     'amount': 500, 
     'price': 45.00}) 

Lưu ý, tên bảng và tên cột phải được xác thực trước.

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