Hướng dẫn python executemany - người thực thi trăn

10.5.5 & nbsp; mysqlcursor.executemany () Phương thức

Cú pháp:

cursor.executemany(operation, seq_of_params)

Phương pháp này chuẩn bị một cơ sở dữ liệu

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
4 (truy vấn hoặc lệnh) và thực thi nó đối với tất cả các chuỗi tham số hoặc ánh xạ được tìm thấy trong chuỗi
data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
5.

Ghi chú

Trong Python, một tuple chứa một giá trị duy nhất phải bao gồm dấu phẩy. Ví dụ, ('ABC') được đánh giá là vô hướng trong khi ('ABC',) được đánh giá là một tuple.('abc') is evaluated as a scalar while ('abc',) is evaluated as a tuple.

Trong hầu hết các trường hợp, phương thức

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
6 lặp lại thông qua chuỗi tham số, mỗi lần chuyển các tham số hiện tại cho phương thức
data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
7.

Tối ưu hóa được áp dụng để chèn: các giá trị dữ liệu được đưa ra bởi các chuỗi tham số được sử dụng bằng cú pháp nhiều hàng. Ví dụ sau đây chèn ba bản ghi:

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)

Đối với ví dụ trước, câu lệnh

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
8 được gửi đến MySQL là:

INSERT INTO employees (first_name, hire_date)
VALUES ('Jane', '2005-02-12'), ('Joe', '2006-05-23'), ('John', '2010-10-03')

Với phương thức

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
6, không thể chỉ định nhiều câu lệnh để thực thi trong đối số
data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
4. Làm như vậy làm tăng một ngoại lệ
INSERT INTO employees (first_name, hire_date)
VALUES ('Jane', '2005-02-12'), ('Joe', '2006-05-23'), ('John', '2010-10-03')
1. Thay vào đó, hãy xem xét sử dụng
data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
7 với
INSERT INTO employees (first_name, hire_date)
VALUES ('Jane', '2005-02-12'), ('Joe', '2006-05-23'), ('John', '2010-10-03')
3.

Chào thân ái và quyết thắng!

Hướng dẫn python executemany - người thực thi trăn
Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!

Câu lệnh INSERT INTO được sử dụng để thêm một bản ghi vào bảng. Trong Python, chúng ta có thể sử dụng (%s) thay cho các giá trị.

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
try:
  mycursor.execute(sql, val)
  mydb.commit()
except:
  mydb.rollback()

print("1 record inserted, ID:", mycursor.lastrowid)
print(mycursor.rowcount, "record inserted.")

Kết nối Python với cơ sở dữ liệu MySQLCâu lệnh mydb.commit () Cần phải thực hiện các thay đổi, nếu không, không có thay đổi nào được thực hiện đối với bảng.

Chèn dữ liệu cho một bản ghi vào bảng

Lưu ý: Câu lệnh mydb.commit () Cần phải thực hiện các thay đổi, nếu không, không có thay đổi nào được thực hiện đối với bảng.

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = [
  ('Peter', 'Lowstreet 4'),
  ('Amy', 'Apple st 652'),
  ('Hannah', 'Mountain 21'),
  ('Michael', 'Valley 345'),
  ('Sandy', 'Ocean blvd 2'),
  ('Betty', 'Green Grass 1'),
  ('Richard', 'Sky st 331'),
  ('Susan', 'One way 98'),
  ('Vicky', 'Yellow Garden 2'),
  ('Ben', 'Park Lane 38'),
  ('William', 'Central st 954'),
  ('Chuck', 'Main Road 989'),
  ('Viola', 'Sideway 1633')
]

try:
   mycursor.executemany(sql, val)
   mydb.commit()
except:
   mydb.rollback()

print(mycursor.rowcount, "was inserted.")

Chèn nhiều bản ghi cùng lúc vào bảng

Trong các bài trước, chúng ta thấy rằng số lượng các bản ghi của cơ sở dữ liệu được đề cập trong các ví dụ được giới hạn ở mức tương đối ít, và các dữ liệu được tổ chức theo kiểu khá đơn giản. Ở bài này chúng ta sẽ cùng tìm hiểu về cách để ghi (write) và tìm nạp (fetch) dữ liệu lớn từ cơ sở dữ liệu bằng cách sử dụng module SQLite3.

Cách tìm nạp dữ liệu đơn giản nhất chính là thực thi câu truy vấn bằng hàm execute() và sau đó sử dụng hàm fetchall(). Điều này đã được đề cập trong bài “Thao tác với cơ sở dữ liệu trong Python – Phần 1”.

  • Hàm executescript(): Đây là một phương thức tiện lợi giúp thực thi nhiều câu lệnh SQL cùng một lúc. Phương thức này sẽ thực thi các câu lệnh SQL mà nó nhận được dưới dạng tham số truyền vào.

+ Cú pháp:

sqlite3.connect.executescript(script)

+ Ví dụ:

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

import sqlite3 
  
# Connection with the DataBase 
# 'library.db' 
connection = sqlite3.connect("library.db") 
cursor = connection.cursor() 
  
# SQL piece of code Executed 
# SQL piece of code Executed 
cursor.executescript(""" 
    CREATE TABLE people( 
        firstname, 
        lastname, 
        age 
    ); 
   
    CREATE TABLE book( 
        title, 
        author, 
        published 
    ); 
   
    INSERT INTO 
    book(title, author, published) 
    VALUES ( 
        'Dan Clarke''s GFG Detective Agency', 
        'Sean Simpsons', 
        1987 
    ); 
    """) 
  
sql = """ 
SELECT COUNT(*) FROM book;"""
  
cursor.execute(sql) 
  
# The output in fetched and returned 
# as a List by fetchall() 
result = cursor.fetchall() 
print(result) 
  
sql = """ 
SELECT * FROM book;"""
  
cursor.execute(sql) 
  
result = cursor.fetchall() 
print(result) 
  
# Changes saved into database 
connection.commit() 
  
# Connection closed(broken)  
# with DataBase 
connection.close() 

+ Kết quả in ra là:

[(1,)]
[("Dan Clarke's GFG Detective Agency", 'Sean Simpsons', 1987)]

+ Lưu ý: Đoạn code ví dụ này có thể sẽ không hoạt động trên các trình thông dịch trực tuyến (online interpreters), do gặp vấn đề về sự cho phép các đặc quyền để tạo và ghi vào cơ sở dữ liệu.

  • Hàm executemany(): Chúng ta sẽ gặp nhiều trường hợp mà trong đó, lượng dữ liệu lớn cần được thêm vào trong cơ sở dữ liệu thì nằm ở trong các Data Files (là các tập tin chứa dữ liệu, ngoài ra còn một số trường hợp đơn giản hơn có thể nhắc đến như List, array). Phương thức executemany() sẽ thực thi một câu lệnh SQL với tất cả các chuỗi tham số hoặc các ánh xạ tham số được tìm thấy trong chuỗi sql. Module sqlite3 còn cho phép sử dụng một iterator để cho phép sử dụng phương thức này với các tham số, thay vì một chuỗi các tham số. Nhưng việc sử dụng vòng lặp sẽ không phù hợp trong trường hợp này, ví dụ dưới dây sẽ cho thấy tại sao. Cú pháp và cách sử dụng phương thức executemany() sẽ được giải thích bên dưới, ngoài ra cách sử dụng nó như một vòng lặp cũng sẽ được trình bày.

+ Ví dụ:

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

import sqlite3 
  
# Connection with the DataBase 
# 'library.db' 
connection = sqlite3.connect("library.db") 
cursor = connection.cursor() 
  
# SQL piece of code Executed 
cursor.execute(""" 
      
    CREATE TABLE book( 
        title, 
        author, 
        published);""") 
   
List = [('A', 'B', 2008), ('C', 'D', 2008), 
                          ('E', 'F', 2010)] 
   
connection. executemany(""" 
                   
    INSERT INTO  
    book(title, author, published)  
    VALUES (?, ?, ?)""", List) 
  
sql = """ 
      SELECT * FROM book;"""
cursor.execute(sql) 
result = cursor.fetchall() 
for x in result: 
    print(x) 
  
# Changes saved into database 
connection.commit() 
  
# Connection closed(broken)  
# with DataBase 
connection.close() 

+ Kết quả in ra là:

Traceback (most recent call last):
  File "C:/Users/GFG/Desktop/SQLITE3.py", line 16, in 
    List[2][3] =[['A', 'B', 2008], ['C', 'D', 2008], ['E', 'F', 2010]]
NameError: name 'List' is not defined

+ Lưu ý: Đoạn code ví dụ này có thể sẽ không hoạt động trên các trình thông dịch trực tuyến (online interpreters), do gặp vấn đề về sự cho phép các đặc quyền để tạo và ghi vào cơ sở dữ liệu.

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
0

+ Kết quả in ra là:

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
1
  • + Lưu ý: Đoạn code ví dụ này có thể sẽ không hoạt động trên các trình thông dịch trực tuyến (online interpreters), do gặp vấn đề về sự cho phép các đặc quyền để tạo và ghi vào cơ sở dữ liệu.

+ Ví dụ:

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
2

+ Kết quả in ra là:

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
3

+ Lưu ý: Đoạn code ví dụ này có thể sẽ không hoạt động trên các trình thông dịch trực tuyến (online interpreters), do gặp vấn đề về sự cho phép các đặc quyền để tạo và ghi vào cơ sở dữ liệu.

Hàm executemany(): Chúng ta sẽ gặp nhiều trường hợp mà trong đó, lượng dữ liệu lớn cần được thêm vào trong cơ sở dữ liệu thì nằm ở trong các Data Files (là các tập tin chứa dữ liệu, ngoài ra còn một số trường hợp đơn giản hơn có thể nhắc đến như List, array). Phương thức executemany() sẽ thực thi một câu lệnh SQL với tất cả các chuỗi tham số hoặc các ánh xạ tham số được tìm thấy trong chuỗi sql. Module sqlite3 còn cho phép sử dụng một iterator để cho phép sử dụng phương thức này với các tham số, thay vì một chuỗi các tham số. Nhưng việc sử dụng vòng lặp sẽ không phù hợp trong trường hợp này, ví dụ dưới dây sẽ cho thấy tại sao. Cú pháp và cách sử dụng phương thức executemany() sẽ được giải thích bên dưới, ngoài ra cách sử dụng nó như một vòng lặp cũng sẽ được trình bày.

  • w3school
  • python.org
  • + Việc sử dụng hàm executemany() có thể làm cho đoạn code sau hoạt động:

Tìm nạp lượng dữ liệu lớn

  • Nguồn và Tài liệu tiếng anh tham khảo:
  • geeksforgeeks
  • Tài liệu từ cafedev:

Full series tự học Python từ cơ bản tới nâng cao tại đây nha.

  • Group Facebook
  • Fanpage
  • Youtube
  • Instagram
  • Twitter
  • Linkedin
  • Pinterest
  • Trang chủ

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!