SQLite không chèn dữ liệu python

Chèn dữ liệu vào cơ sở dữ liệu trong Python bằng SQLite3

Chèn dữ liệu vào cơ sở dữ liệu. Cho đến bây giờ chúng ta đã học được tương ứng. Vì vậy, trong hướng dẫn này, chúng tôi sẽ tập trung vào Làm thế nào để chèn dữ liệu vào bảng trong SQLite bằng Python?

SQLite không chèn dữ liệu python

Hướng dẫn này chủ yếu tập trung vào .

  • Chèn dữ liệu đơn lẻ vào bảng SQLite trong Python
  • Chèn nhiều dữ liệu vào bảng SQLite trong Python
  • Truy vấn được tham số hóa để chèn Dữ liệu động vào bảng SQLite trong Python

Trong hướng dẫn trước, chúng ta đã tìm hiểu về cách tạo kết nối với cơ sở dữ liệu của chúng ta trong python bằng SQLite. Vì vậy, đừng lo lắng, chúng tôi cũng sẽ sửa đổi cái đó

Bạn có thể thêm các hàng mới vào bảng SQLite hiện có bằng cách sử dụng câu lệnh INSERT INTO. Trong phần này, bạn cần chỉ định tên bảng, tên cột và giá trị (theo thứ tự như tên cột)

cú pháp

Sau đây là cú pháp khuyến nghị của câu lệnh INSERT –

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);

Ở đâu, cột1, cột2, cột3,. là tên của các cột của bảng và value1, value2, value3,. là các giá trị bạn cần chèn vào bảng

Thí dụ

Giả sử chúng ta đã tạo một bảng có tên CRICKETERS bằng cách sử dụng câu lệnh CREATE TABLE như hình dưới đây -

sqlite> CREATE TABLE CRICKETERS (
   First_Name VARCHAR(255),
   Last_Name VARCHAR(255),
   Age int,
   Place_Of_Birth VARCHAR(255),
   Country VARCHAR(255)
);
sqlite>

Câu lệnh PostgreSQL sau chèn một hàng vào bảng đã tạo ở trên

sqlite> insert into CRICKETERS 
   (First_Name, Last_Name, Age, Place_Of_Birth, Country) values
   ('Shikhar', 'Dhawan', 33, 'Delhi', 'India');
sqlite>

Trong khi chèn bản ghi bằng câu lệnh INSERT INTO, nếu bạn bỏ qua bất kỳ tên cột nào, bản ghi này sẽ được chèn để lại các khoảng trống tại các cột mà bạn đã bỏ qua

sqlite> insert into CRICKETERS 
   (First_Name, Last_Name, Country) values 
   ('Jonathan', 'Trott', 'SouthAfrica');
sqlite>

Bạn cũng có thể chèn các bản ghi vào một bảng mà không chỉ định tên cột, nếu thứ tự của các giá trị bạn chuyển giống với tên cột tương ứng của chúng trong bảng

sqlite> insert into CRICKETERS values('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka');
sqlite> insert into CRICKETERS values('Virat', 'Kohli', 30, 'Delhi', 'India');
sqlite> insert into CRICKETERS values('Rohit', 'Sharma', 32, 'Nagpur', 'India');
sqlite>

Sau khi chèn các bản ghi vào một bảng, bạn có thể xác minh nội dung của nó bằng cách sử dụng câu lệnh SELECT như hình dưới đây -

sqlite> select * from cricketers;
Shikhar  | Dhawan     | 33 | Delhi  | India
Jonathan | Trott      |    |        | SouthAfrica
Kumara   | Sangakkara | 41 | Matale | Srilanka
Virat    | Kohli      | 30 | Delhi  | India
Rohit    | Sharma     | 32 | Nagpur | India
sqlite>

Chèn dữ liệu bằng python

Để thêm các bản ghi vào một bảng hiện có trong cơ sở dữ liệu SQLite -

  • Nhập gói sqlite3

  • Tạo một đối tượng kết nối bằng phương thức connect() bằng cách chuyển tên của cơ sở dữ liệu làm tham số cho nó

  • Phương thức con trỏ () trả về một đối tượng con trỏ mà bạn có thể giao tiếp với SQLite3 bằng cách sử dụng. Tạo một đối tượng con trỏ bằng cách gọi đối tượng con trỏ () trên đối tượng Kết nối (đã tạo ở trên)

  • Sau đó, gọi phương thức exec() trên đối tượng con trỏ, bằng cách chuyển một câu lệnh INSERT làm tham số cho nó

    Tôi đang theo từng dòng một khóa học trực tuyến nhưng không hiểu sao tôi lại gặp phải lỗi này. Tôi có thể thay đổi gì để có kết quả hoàn chỉnh?

    dữ liệu mẫu

    class_data =[( 1, “Raj”,“m”, 70, 84, 92),
    ( 2, “Poonam”, “F”, 87, 69, 93),
    ( 3, “Nik”, “M”, 65, 83, 90),
    ( 4, “Rahul”,“F”, 83, 76, 89)]

    kết nối mở

    kết nối = sqlite3. kết nối ("lớp họcDB. db”)

    mở con trỏ

    con trỏ = kết nối. con trỏ()

    chèn từng hồ sơ sinh viên

    cho học sinh trong lớp học_data
    # chuỗi truy vấn được định dạng
    insert_statement = “”“CHÈN VÀO lớp học
    (student_id, tên, giới tính, vật lý_marks, hóa học_marks, toán học_marks)
    GIÁ TRỊ
    ({0}, “{1}”, “{2}”, {3}, {4}, {5});”“”. định dạng(sinh viên[0], sinh viên[1], sinh viên[2],
    sinh viên[3],sinh viên[4],sinh viên[5])
    # thực hiện truy vấn chèn
    con trỏ. thực thi (insert_statement)

    cam kết những thay đổi

    sự liên quan. làm()

    đóng kết nối

    sự liên quan. đóng()


    KẾT QUẢ



    OperationalError Traceback (cuộc gọi cuối cùng gần đây nhất)
    Ô Trong [18], dòng 20
    14 insert_statement = “”“CHÈN VÀO lớp học
    15 (id_sinh viên, tên, giới tính, điểm_vật lý, điểm_hóa học, điểm_toán học)
    16 GIÁ TRỊ
    17 ({0}, “{1}”, “{2}”, {3}, {4}, {5});”“”. định dạng(sinh viên[0], sinh viên[1], sinh viên[2],
    18 sinh viên[3],sinh viên[4], sinh viên[5])
    19 # thực hiện truy vấn chèn
    —> 20 con trỏ. thực thi (insert_statement)
    22 # thực hiện các thay đổi
    23 kết nối. làm()

    lỗi hoạt động. bảng lớp học không có cột tên là chemistry_marks

    Mã Python của bạn hiển thị lộn xộn. Bạn có để ý không?

    ```
    Your code will be here.
    ```
    

    Bạn đã đăng chính xác cùng một câu hỏi bốn ngày trước. Tại sao bạn sao chép câu hỏi của riêng bạn?

    SQLite không chèn dữ liệu python
    Lỗi khi chèn cột vào bảng Trợ giúp về Python

    Vui lòng không gửi văn bản trong hình ảnh. Tại sao tôi không nên tải lên hình ảnh mã/dữ liệu/lỗi khi đặt câu hỏi? . ``` Văn bản của bạn sẽ ở đây. ``` Bây giờ những gì tôi nhận thấy trong hình ảnh của bạn. Chúng tôi không thấy cách bạn tạo bảng lớp học nên chúng tôi không thể nói tại sao thiếu cột này. Không sử dụng định dạng (), chuỗi f, v.v. để chèn các giá trị vào các lệnh SQL. Các phương pháp này tạo ra các lỗ hổng SQL-injection. Nếu t…

    cụ thể là

    Chúng tôi không thấy cách bạn tạo bảng SQL

    for i in range(10):
        print(i)
    
    4 vì vậy chúng tôi không thể nói tại sao cột bị thiếu

    Bạn đã tạo tệp cơ sở dữ liệu SQLite

    for i in range(10):
        print(i)
    
    5 như thế nào?

    Nó đã thay đổi ba dấu ngoặc kép thành ba tích tắc và có vẻ như điều đó đã giải quyết được vấn đề. Sau khi in, tôi nhận được một lỗi khác cho biết giá trị không được xác định

    Tôi vẫn thắc mắc tại sao nó không hoạt động vì tôi đang làm theo hướng dẫn từng bước

    Nếu bạn muốn có một ảnh chụp màn hình của ví dụ, gửi email cho tôi. (tsneed2000@gmail. com)

    “”"

    dữ liệu mẫu

    class_data =[( 1, “Raj”,“m”, 70, 84, 92),
    ( 2, “Poonam”, “F”, 87, 69, 93),
    ( 3, “Nik”, “M”, 65, 83, 90),
    ( 4, “Rahul”,“F”, 83, 76, 89)]

    kết nối mở

    kết nối = sqlite3. kết nối ("lớp họcDB. db”)

    mở con trỏ

    con trỏ = kết nối. con trỏ()

    chèn từng hồ sơ sinh viên

    cho học sinh trong lớp học_data
    # chuỗi truy vấn được định dạng
    insert_statement = ‘’‘CHÈN VÀO lớp học
    (student_id, tên, giới tính, vật lý_marks, hóa học_marks, toán học_marks)
    GIÁ TRỊ
    ({0}, “{1}”, “{2}”, {3}, {4}, {5});’‘’. định dạng(sinh viên[0], sinh viên[1], sinh viên[2],
    sinh viên[3],sinh viên[4],sinh viên[5])
    # thực hiện truy vấn chèn
    con trỏ. thực thi (insert_statement)

    cam kết những thay đổi

    sự liên quan. làm()

    đóng kết nối

    sự liên quan. đóng()
    “”"
    ++++++++++++++++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++++++++++++++++
    Thông báo lỗi


    NameError Traceback (cuộc gọi gần đây nhất)
    Ô Trong [2], dòng 8
    2 class_data =[( 1, “Raj”,“m”, 70, 84, 92),
    3 ( 2, “Poonam”, “F”, 87, 69, 93),
    4 ( 3, “Nik”, “M”, 65, 83, 90),
    5 ( 4, “Rahul”,“F”, 83, 76, 89)]
    7 # mở kết nối
    ----> 8 kết nối = sqlite3. kết nối ("lớp họcDB. db”)
    9 # mở con trỏ
    10 con trỏ = kết nối. con trỏ()

    TênLỗi. tên 'sqlite3' không được xác định

    SQLite không chèn dữ liệu python
    Tyler Snee

    Nó đã thay đổi ba dấu ngoặc kép thành ba tích tắc và có vẻ như điều đó đã giải quyết được vấn đề

    Tôi xin lỗi, tôi không hiểu những gì bạn đã làm. Ba "tích tắc" đó là gì. Tôi đang đề cập đến triple backtick - chuỗi ba ký tự backtick.

    for i in range(10):
        print(i)
    
    6. Chúng là các ký tự cụ thể và chúng được sử dụng để hiển thị mã của bạn một cách chính xác tại đây trong diễn đàn này. Chúng không phải là một phần của mã Python

    Chúng tôi không nhìn thấy chính xác mã Python của bạn nếu bạn không đánh dấu mã đúng cách


    Ví dụ: nếu bạn cần đặt văn bản này vào bài đăng của mình

    for i in range(10):
        print(i)
    

    Bạn phải đặt toàn bộ khối văn bản giữa hai dòng riêng biệt bằng ba dấu gạch ngược và thực tế là bạn phải đưa văn bản này vào bài đăng của mình thay vào đó

    ```
    for i in range(10):
        print(i)
    ```
    

    Sau đó, mã Python của bạn sẽ hiển thị chính xác ở đây và chúng tôi sẽ có thể đọc nó


    Vui lòng chỉnh sửa bài đăng cuối cùng của bạn và đặt một dòng riêng biệt có dấu ba dấu ngược (và không có gì khác) trước mã của bạn và một dòng riêng biệt khác có dấu ba dấu ngược sau mã của bạn. Nếu bạn không thể viết ký tự backtick trên bàn phím (bạn không thể thay thế nó bằng một ký tự trông tương tự như dấu nháy đơn

    for i in range(10):
        print(i)
    
    7), hãy sao chép dòng này ở đây và dán vào bài đăng của bạn

    ```
    

    Kèm theo thông báo lỗi theo cùng một cách để chúng tôi cũng có thể nhìn thấy nó đúng cách. Nhìn vào bản xem trước trực tiếp của bài đăng của bạn ở phía bên phải để kiểm tra xem nó có được định dạng đúng không


    SQLite không chèn dữ liệu python
    Tyler Snee

    Nếu bạn muốn có ảnh chụp màn hình của ví dụ…

    Không chắc chắn không. Chúng tôi không muốn ảnh chụp màn hình của văn bản

    Cảm ơn vì sự kiên nhẫn của bạn

    Nhân tiện, tôi đang sử dụng máy tính xách tay jupyter, vì đó là thứ mà người hướng dẫn đang sử dụng

    Tôi không có quyền chỉnh sửa bài đăng nên tôi có mã ở đây với

    for i in range(10):
        print(i)
    
    8 và tôi đang gặp lỗi. Tôi đã thêm (nhập sqlite3) nên lỗi xác định sqlite3 khác đã được giải quyết

    Tôi có định dạng này không chính xác?

    =================================================================

    # sample data 
    
    import sqlite3
    
    classroom_data =[( 1, "Raj","m", 70, 84, 92),
                     ( 2, "Poonam", "F", 87, 69, 93),
                     ( 3, "Nik", "M", 65, 83, 90),
                     ( 4, "Rahul","F", 83, 76, 89)]
                      
    # open connection
    connection = sqlite3.connect("classroomDB.db")
    # open cursor
    cursor = connection.cursor()
    # insert each student record 
    for student in classroom_data: 
        # formatted query string 
        insert_statement = '''INSERT INTO classroom
                           (student_id, name, gender, physics_marks, chemistry_marks, mathematics_marks)
                           VALUES
                           ({0}, "{1}", "{2}", {3}, {4}, {5});'''.format(student[0], student[1], student[2],
                                                                        student[3],student[4], student[5])
        # execute insert query 
        cursor.execute(insert_statement)
        
    # commit the changes
    connection.commit()
    # close the connection
    connection.close()
    

    ---------------------------------------------------------------------------
    OperationalError                          Traceback (most recent call last)
    Cell In [2], line 23
         17     insert_statement = '''INSERT INTO classroom
         18                        (student_id, name, gender, physics_marks, chemistry_marks, mathematics_marks)
         19                        VALUES
         20                        ({0}, "{1}", "{2}", {3}, {4}, {5});'''.format(student[0], student[1], student[2],
         21                                                                     student[3],student[4], student[5])
         22     # execute insert query 
    ---> 23     cursor.execute(insert_statement)
         25 # commit the changes
         26 connection.commit()
    
    OperationalError: table classroom has no column named chemistry_marks
    
    

    Cảm ơn vì sự kiên nhẫn của bạn

    Nhân tiện, tôi đang sử dụng máy tính xách tay jupyter, vì đó là thứ mà người hướng dẫn đang sử dụng

    Tôi không có quyền chỉnh sửa bài đăng nên tôi có mã ở đây với

    for i in range(10):
        print(i)
    
    8 và tôi đang gặp lỗi. Tôi đã thêm (nhập sqlite3) nên lỗi xác định sqlite3 khác đã được giải quyết

    Tôi có định dạng này không chính xác?

    =================================================================

    # sample data 
    
    import sqlite3
    
    classroom_data =[( 1, "Raj","m", 70, 84, 92),
                     ( 2, "Poonam", "F", 87, 69, 93),
                     ( 3, "Nik", "M", 65, 83, 90),
                     ( 4, "Rahul","F", 83, 76, 89)]
                      
    # open connection
    connection = sqlite3.connect("classroomDB.db")
    # open cursor
    cursor = connection.cursor()
    # insert each student record 
    for student in classroom_data: 
        # formatted query string 
        insert_statement = '''INSERT INTO classroom
                           (student_id, name, gender, physics_marks, chemistry_marks, mathematics_marks)
                           VALUES
                           ({0}, "{1}", "{2}", {3}, {4}, {5});'''.format(student[0], student[1], student[2],
                                                                        student[3],student[4], student[5])
        # execute insert query 
        cursor.execute(insert_statement)
        
    # commit the changes
    connection.commit()
    # close the connection
    connection.close()
    

    ---------------------------------------------------------------------------
    OperationalError                          Traceback (most recent call last)
    Cell In [2], line 23
         17     insert_statement = '''INSERT INTO classroom
         18                        (student_id, name, gender, physics_marks, chemistry_marks, mathematics_marks)
         19                        VALUES
         20                        ({0}, "{1}", "{2}", {3}, {4}, {5});'''.format(student[0], student[1], student[2],
         21                                                                     student[3],student[4], student[5])
         22     # execute insert query 
    ---> 23     cursor.execute(insert_statement)
         25 # commit the changes
         26 connection.commit()
    
    OperationalError: table classroom has no column named chemistry_marks
    

    Tuyệt vời. Bạn đã định dạng bài đăng chính xác. Bạn có thể tự mình thấy rằng thụt đầu dòng không còn bị mất nữa và các phần của văn bản không bị thay thế bởi thứ gì khác nữa. Tôi nghĩ rằng với các quyền hiện tại của bạn, bạn có một khoảng thời gian giới hạn để chỉnh sửa các bài đăng của mình trong diễn đàn này

    Về mã

    Lưu ý rằng mọi thứ cần thiết đã được nói khi bắt đầu giao tiếp của chúng tôi, vì vậy tôi sẽ cố gắng giải thích nó bằng các từ khác nhau và chi tiết hơn

    connection = sqlite3.connect("classroomDB.db")
    

    Sử dụng lệnh này, bạn đang mở cơ sở dữ liệu SQLite được lưu trữ trong tệp có tên

    for i in range(10):
        print(i)
    
    5

        insert_statement = '''INSERT INTO classroom
                           (student_id, name, gender, physics_marks, chemistry_marks, mathematics_marks)
                           VALUES
                           ({0}, "{1}", "{2}", {3}, {4}, {5});'''.format(student[0], student[1], student[2],
                                                                        student[3],student[4], student[5])
    

    Tại đây, bạn xây dựng truy vấn SQL sẽ được sử dụng để chèn một hàng mới vào bảng cơ sở dữ liệu

    for i in range(10):
        print(i)
    
    4 nằm trong tệp cơ sở dữ liệu đã mở
    for i in range(10):
        print(i)
    
    5. Lưu ý rằng bạn không tạo bất kỳ cơ sở dữ liệu, bảng hoặc cột nào trong chương trình này. Bạn đang sử dụng cơ sở dữ liệu đã tồn tại trước khi chương trình được thực thi

    Cũng lưu ý rằng ở đây trong truy vấn SQL này, bạn đang đề cập đến một cột có tên là

    ```
    for i in range(10):
        print(i)
    ```
    
    3

    Cũng như tôi đã lưu ý trước đó. cách này (sử dụng

    ```
    for i in range(10):
        print(i)
    ```
    
    4) để chèn các giá trị tham số vào một truy vấn SQL là thực sự sai - nó rất nguy hiểm. Nếu khóa học không giải thích điều này cho bạn, tôi sẽ tránh xa nó. Liên kết đến làm thế nào để làm điều này một cách chính xác là trong bài viết trước của tôi

    for i in range(10):
        print(i)
    
    0

    Tại đây bạn thực hiện truy vấn SQL đã xây dựng. Lỗi hiển thị dưới dạng ngoại lệ đến từ câu lệnh này sau khi bạn thực hiện ô sổ ghi chép. Xem bên dưới

    for i in range(10):
        print(i)
    
    1

    Đây là thông báo ngoại lệ giải thích cho bạn rằng trong khi bạn đang thao tác với bảng

    for i in range(10):
        print(i)
    
    4, bạn đã tham chiếu đến một cột có tên là
    ```
    for i in range(10):
        print(i)
    ```
    
    3 nhưng cột này không tồn tại trong bảng

    Phần kết luận

    Bạn đang sử dụng một tệp cơ sở dữ liệu hiện có tên là

    for i in range(10):
        print(i)
    
    5. Chương trình của bạn được viết sao cho nó dự kiến ​​rằng cơ sở dữ liệu chứa một bảng có tên là
    for i in range(10):
        print(i)
    
    4 chứa một cột có tên là
    ```
    for i in range(10):
        print(i)
    ```
    
    3. Cột không tồn tại ở đó nên chương trình thoát với lỗi

    Tôi đã hỏi bạn về những điều này sớm hơn

    • Tệp cơ sở dữ liệu
      for i in range(10):
          print(i)
      
      5 đến từ đâu?
      • Bạn đã tạo tập tin hay bạn đã nhận được nó bằng cách nào đó?
    • Bạn không cần thực hiện một số thao tác với tệp trước khi thực hiện tác vụ này sao?
      • Bạn đã không bỏ qua một số bài tập?
    • Hay cột không có tên khác?

    Trả lời những câu hỏi này là cần thiết để tìm ra nguyên nhân của vấn đề

    Khi tạo bảng, tôi gặp lỗi nói rằng "phòng học bảng" đã tồn tại

    for i in range(10):
        print(i)
    
    2

    =================================================================

    for i in range(10):
        print(i)
    
    3

    Có thể lỗi hiện tại không tồn tại cột "chemology_marks" liên quan đến việc tạo bảng

    • Tệp cơ sở dữ liệu classDB. db là thứ tôi đã nhập từng chữ cái vào sổ ghi chép jupyter khi người hướng dẫn đang nói về nó trong jupyternotebook. Nó dường như đang hoạt động cho người hướng dẫn nên nó có thể được tạo hoặc nhập bằng cách nào đó

      Làm cách nào để XÁC NHẬN dữ liệu trong SQLite bằng Python?

      Chèn dữ liệu bằng python .
      Nhập gói sqlite3
      Tạo một đối tượng kết nối bằng phương thức connect() bằng cách chuyển tên của cơ sở dữ liệu làm tham số cho nó
      Phương thức con trỏ () trả về một đối tượng con trỏ mà bạn có thể giao tiếp với SQLite3 bằng cách sử dụng

      Làm cách nào để CHÈN dữ liệu vào cơ sở dữ liệu SQLite?

      SQLite INSERT – chèn một hàng vào bảng .
      Đầu tiên, chỉ định tên của bảng mà bạn muốn chèn dữ liệu sau từ khóa INSERT INTO
      Thứ hai, thêm danh sách các cột được phân tách bằng dấu phẩy sau tên bảng. Danh sách cột là tùy chọn. .
      Thứ ba, thêm danh sách các giá trị được phân tách bằng dấu phẩy sau từ khóa GIÁ TRỊ

      Làm cách nào để lấy id INSERT cuối cùng trong Python sqlite3?

      Bạn có thể sử dụng hàm last_insert_rowid() . Hàm last_insert_rowid() trả về ROWID của dòng chèn cuối cùng từ kết nối cơ sở dữ liệu đã gọi hàm.

      Làm cách nào để thêm cột trong sqlite3 Python?

      Cú pháp để THÊM MỘT CỘT vào một bảng trong SQLite (sử dụng câu lệnh ALTER TABLE) là. ALTER TABLE table_name THÊM new_column_name cột_definition; table_name. Tên của bảng để sửa đổi.