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?
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ẫuclass_data =[[ 1, “Raj”,“m”, 70, 84, 92],
kết nối mở
[ 2, “Poonam”, “F”, 87, 69, 93],
[ 3, “Nik”, “M”, 65, 83, 90],
[ 4, “Rahul”,“F”, 83, 76, 89]]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êncho 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]sự liên quan. làm[]
đóng kết nốisự 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?
Lỗi khi chèn cột vào bảng Trợ giúp về PythonVui 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
4 vì vậy chúng tôi không thể nói tại sao cột bị thiếufor i in range[10]: print[i]
Bạn đã tạo tệp cơ sở dữ liệu SQLite
5 như thế nào?for i in range[10]: print[i]
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ẫuclass_data =[[ 1, “Raj”,“m”, 70, 84, 92],
kết nối mở
[ 2, “Poonam”, “F”, 87, 69, 93],
[ 3, “Nik”, “M”, 65, 83, 90],
[ 4, “Rahul”,“F”, 83, 76, 89]]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êncho học sinh trong lớp học_data
cam kết những thay đổi
# 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]sự liên quan. làm[]
sự liên quan. đóng[]
“”"
++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++
Thông báo lỗiNameError 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
Tyler SneeNó đã 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.
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ã Pythonfor i in range[10]: print[i]
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
7], hãy sao chép dòng này ở đây và dán vào bài đăng của bạnfor i in range[10]: print[i]
```
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
Tyler SneeNế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
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ếtfor i in range[10]: print[i]
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
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ếtfor i in range[10]: print[i]
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
5for i in range[10]: print[i]
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
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 thifor i in range[10]: print[i]
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à
3``` for i in range[10]: print[i] ```
Cũng như tôi đã lưu ý trước đó. cách này [sử dụng
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] ```
0for i in range[10]: print[i]
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
1for i in range[10]: print[i]
Đâ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
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``` for i in range[10]: print[i] ```
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à
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``` for i in range[10]: print[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
5 đến từ đâu?for i in range[10]: print[i]
- 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
2for i in range[10]: print[i]
=================================================================
3for i in range[10]: print[i]
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 sqlite3Tạ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ụngLà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 INTOThứ 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.
- Tệp cơ sở dữ liệu