Tuyên bố chuẩn bị mysql Python

- [Người hướng dẫn] Các truy vấn đã chuẩn bị sẵn là một công cụ mạnh mẽ trong hầu hết các ứng dụng cơ sở dữ liệu quan hệ. Chúng ta hãy xem nhanh cách thức hoạt động của nó. Đây là db_prepared. py từ chương một của các tệp bài tập. Một câu lệnh đã chuẩn bị là một câu lệnh được công cụ cơ sở dữ liệu phân tích cú pháp một lần và sau đó được sử dụng nhiều lần ngay cả với các giá trị khác nhau. Ở đây, chúng tôi đang sử dụng MySQL và bạn lưu ý rằng tôi có MY_HOST, USER và PASSWORD là Constance giúp đường kết nối sạch hơn rất nhiều. Và sau đó bạn nhận thấy rằng khi tôi tạo con trỏ của mình, tôi có tùy chọn này ở đây đã chuẩn bị=True. MySQL theo mặc định không cung cấp các câu lệnh đã chuẩn bị sẵn và bạn luôn muốn sử dụng các câu lệnh đã chuẩn bị sẵn. Và do đó, bằng cách đặt cờ đã chuẩn bị này trong đối tượng con trỏ, giờ đây bạn có thể sử dụng các câu lệnh đã chuẩn bị. Vì vậy, mỗi khi bạn sử dụng MySQL, bạn sẽ luôn muốn thiết lập chuẩn bị=True. Chúng ta hãy xem tại sao. Ở đây bạn chú ý chúng tôi bỏ bảng, tạo bảng, chúng tôi đang làm…

Thực hành trong khi bạn học với các tập tin bài tập

Tải xuống các tệp mà người hướng dẫn sử dụng để dạy khóa học. Theo dõi và học hỏi bằng cách xem, nghe và thực hành

Tải xuống các khóa học và học mọi lúc, mọi nơi

Xem các khóa học trên thiết bị di động của bạn mà không cần kết nối internet. Tải xuống các khóa học bằng ứng dụng LinkedIn Learning trên iOS hoặc Android của bạn

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Đúng. Chúng tôi có hơn 700 cuốn sách trong thư viện của chúng tôi. Sách bao gồm Python được liệt kê ở đây và khi bạn đã chọn một cuốn sách có liên quan, chúng tôi sẽ liên kết bạn với Amazon để đặt hàng

Ví dụ này xuất phát từ mô-đun đào tạo "Cơ sở dữ liệu Python và SQL" của chúng tôi. Bạn sẽ tìm thấy mô tả về chủ đề và một số ví dụ liên quan chặt chẽ khác trên trang chỉ mục mô-đun "Cơ sở dữ liệu Python và SQL"

Mô tả đầy đủ về mã nguồn

Bạn có thể tìm hiểu thêm về ví dụ này trong các khóa đào tạo được liệt kê trên trang này, trên đó bạn sẽ nhận được một bộ ghi chú đào tạo đầy đủ

Nhiều mô-đun đào tạo khác có sẵn để tải xuống [với mục đích sử dụng hạn chế] từ trung tâm tải xuống của chúng tôi theo Giấy phép Ghi chú Đào tạo Mở

• Trung tâm giải pháp của chúng tôi cung cấp một số bài viết kỹ thuật dài hơn
• Kho lưu trữ diễn đàn Opentalk của chúng tôi cung cấp trung tâm câu hỏi và trả lời
• Miệng Ngựa cung cấp một mẹo hay suy nghĩ hàng ngày
• Các tài nguyên khác có sẵn thông qua trung tâm tài nguyên
• Tất cả các tài nguyên này có thể được tìm kiếm thông qua công cụ tìm kiếm của chúng tôi
• Và có một chỉ số toàn cầu ở đây

Đây là một chương trình mẫu, trình diễn trên lớp hoặc câu trả lời từ một khóa đào tạo. Mục đích chính của nó là cung cấp dịch vụ sau khóa học cho những khách hàng đã tham gia các khóa học công khai hoặc tại chỗ của chúng tôi, nhưng các ví dụ thường được cung cấp theo các điều kiện được mô tả bên dưới

Trang web này được viết và duy trì bởi Well House Consultants

Những người tham dự trước đây trong các khóa đào tạo của chúng tôi được hoan nghênh sử dụng các ví dụ riêng lẻ trong quá trình lập trình của họ, nhưng phải kiểm tra các ví dụ họ sử dụng để đảm bảo rằng chúng phù hợp với công việc của họ. Hãy nhớ rằng một số ví dụ của chúng tôi chỉ cho bạn cách không làm điều gì đó - kiểm tra ghi chú của bạn. Well House Consultants không chịu trách nhiệm về sự phù hợp của các chương trình ví dụ này với nhu cầu của khách hàng

Chương trình này thuộc bản quyền của Well House Consultants Ltd. Bạn bị cấm sử dụng nó để chạy các khóa đào tạo của riêng bạn mà không có sự cho phép trước bằng văn bản của chúng tôi. Xem trang của chúng tôi về cung cấp phần mềm khóa học để biết thêm chi tiết

Bất kỳ hình ảnh nào của chúng tôi trong mã này KHÔNG được sử dụng lại trên một URL công khai mà không có sự cho phép trước của chúng tôi. Đối với mục đích sử dụng cá nhân Bona Fide, chúng tôi sẽ thường cấp quyền cho bạn với điều kiện bạn cung cấp liên kết quay lại. Việc sử dụng thương mại trên một trang web sẽ phải trả phí giấy phép cho mỗi hình ảnh được sử dụng - chi tiết theo yêu cầu

Bài viết này trình bày cách sử dụng truy vấn Python được tham số hóa hoặc Câu lệnh đã chuẩn bị để thực hiện các thao tác cơ sở dữ liệu MySQL

Chúng tôi sử dụng truy vấn được tham số hóa để sử dụng biến Python trong truy vấn SQL. Ví dụ. –

  • Chúng ta thường cần truyền các biến cho SQL select query trong mệnh đề where để kiểm tra một số điều kiện
  • Trong biểu mẫu đăng ký người dùng, người dùng nhập thông tin chi tiết của mình. Bạn có thể lấy các giá trị đó trong biến Python và chèn chúng vào bảng

Đọc thêm

  • Giải bài tập Python MySQL
  • Đọc Hướng dẫn Python MySQL [Hướng dẫn đầy đủ]

Đối với bài viết này, chúng tôi sẽ sử dụng bảng Nhân viên có trong máy chủ MySQL của tôi. Xem chi tiết cột của nó

bảng nhân viên

Mục lục

Truy vấn được tham số hóa là gì

Truy vấn được tham số hóa là truy vấn trong đó các phần giữ chỗ [_______0_______0] được sử dụng cho các tham số [giá trị cột] và các giá trị tham số được cung cấp tại thời điểm thực hiện

Hãy xem ví dụ về truy vấn được tham số hóa

sql_parameterized_query = """Update employee set Salary = %s where id = %s"""

Như bạn có thể thấy, chúng tôi đang sử dụng một trình giữ chỗ [

query = """Update employee set Salary = %s where id = %s"""
tuple1 = [8000, 5]
cursor.execute[query, tuple1]
0] cho cột lương và id. Chúng tôi cần cung cấp các giá trị trong trình giữ chỗ [
query = """Update employee set Salary = %s where id = %s"""
tuple1 = [8000, 5]
cursor.execute[query, tuple1]
0] trước khi thực hiện truy vấn. Truyền các biến Python vào vị trí của trình giữ chỗ khi chúng tôi thực hiện truy vấn

Chúng ta cần truyền hai đối số sau cho hàm

query = """Update employee set Salary = %s where id = %s"""
tuple1 = [8000, 5]
cursor.execute[query, tuple1]
3 để chạy truy vấn được tham số hóa

  • truy vấn SQL
  • Một bộ giá trị tham số. Trong trường hợp của chúng tôi, chúng tôi cần chuyển hai biến Python, một cho lương và một cho id
query = """Update employee set Salary = %s where id = %s"""
tuple1 = [8000, 5]
cursor.execute[query, tuple1]

Sử dụng Truy vấn được tham số hóa và Tuyên bố đã chuẩn bị

Có 4 lý do chính để sử dụng. Có bốn lý do chính để sử dụng

Có bốn lý do chính để sử dụng

  • biên dịch một lần. Truy vấn được tham số hóa chỉ được biên dịch một lần. Khi bạn sử dụng truy vấn được tham số hóa, nó sẽ được biên dịch trước và lưu trữ trong một đối tượng PreparedStatement. Bây giờ, hãy sử dụng đối tượng này để thực hiện cùng một câu lệnh nhiều lần một cách hiệu quả. Ghi chú. Đối với một truy vấn tiêu chuẩn, MySQL biên dịch truy vấn mỗi lần trước khi chạy nó
  • Cải thiện tốc độ. Nếu bạn thực thi lặp đi lặp lại các câu lệnh SQL với một truy vấn được biên dịch sẵn, nó sẽ giảm thời gian thực hiện
  • Hoạt động tương tự với dữ liệu khác nhau. Bạn có thể sử dụng nó để thực hiện cùng một truy vấn nhiều lần với các dữ liệu khác nhau. Ví dụ: bạn muốn chèn 200 hàng vào một bảng. Trong những trường hợp như vậy, hãy sử dụng truy vấn được tham số hóa để thực hiện lặp lại cùng một thao tác với một bộ giá trị khác
  • Nó ngăn chặn các cuộc tấn công SQL injection

Ghi chú. Chúng tôi đang sử dụng MySQL Connector Python để thực hiện một truy vấn được tham số hóa

Cách sử dụng Truy vấn được tham số hóa trong Python

Tạo đối tượng câu lệnh Đã chuẩn bị bằng cách sử dụng

query = """Update employee set Salary = %s where id = %s"""
tuple1 = [8000, 5]
cursor.execute[query, tuple1]
4

Nó tạo một con trỏ cụ thể trên đó các câu lệnh được chuẩn bị và trả về một thể hiện của lớp

query = """Update employee set Salary = %s where id = %s"""
tuple1 = [8000, 5]
cursor.execute[query, tuple1]
5

________số 8_______

Ví dụ để chèn dữ liệu vào bảng MySQL bằng Truy vấn được tham số hóa

Đôi khi bạn cần chèn một biến Python làm giá trị cột trong truy vấn chèn. Ví dụ: người dùng đã điền vào biểu mẫu trực tuyến và nhấp vào gửi. Vì vậy, bạn cần chèn các giá trị đó vào bảng MySQL

Trước tiên, bạn cần nhập dữ liệu đầu vào của người dùng vào một biến và chuyển biến đó vào truy vấn INSERT dưới dạng trình giữ chỗ [

query = """Update employee set Salary = %s where id = %s"""
tuple1 = [8000, 5]
cursor.execute[query, tuple1]
0]. Tất cả các giá trị là động, tôi. e. , tùy thuộc vào đầu vào của người dùng

Hãy xem cách sử dụng truy vấn được tham số hóa để chèn dữ liệu vào cơ sở dữ liệu MySQL bằng Python

import mysql.connector

try:
    connection = mysql.connector.connect[host='localhost',
                                         database='python_db',
                                         user='root']

    cursor = connection.cursor[prepared=True]
    # Parameterized query
    sql_insert_query = """ INSERT INTO Employee
                       [id, Name, Joining_date, salary] VALUES [%s,%s,%s,%s]"""
    # tuple to insert at placeholder
    tuple1 = [1, "Json", "2019-03-23", 9000]
    tuple2 = [2, "Emma", "2019-05-19", 9500]

    cursor.execute[sql_insert_query, tuple1]
    cursor.execute[sql_insert_query, tuple2]
    connection.commit[]
    print["Data inserted successfully into employee table using the prepared statement"]

except mysql.connector.Error as error:
    print["parameterized query failed {}".format[error]]
finally:
    if connection.is_connected[]:
        cursor.close[]
        connection.close[]
        print["MySQL connection is closed"]

đầu ra

Data inserted successfully into employee table using the prepared statement
MySQL connection is closed

Tham khảo tìm nạp các hàng từ bảng MySQL trong Python bằng cách sử dụng Truy vấn được tham số hóa

Hiểu chương trình Truy vấn được tham số hóa Python MySQL

  • Đầu tiên, chúng tôi thiết lập kết nối với MySQL từ Python
  • Tiếp theo, chúng tôi đã tạo một đối tượng câu lệnh đã chuẩn bị
  • Tiếp theo, chúng tôi đã tạo truy vấn SQL được tham số hóa. Trong truy vấn này, chúng tôi đang sử dụng bốn trình giữ chỗ cho bốn cột
  • Tiếp theo, chúng tôi đã thêm giá trị của bốn cột trong bộ dữ liệu theo thứ tự tuần tự
  • Tiếp theo, chúng tôi đã chuyển truy vấn chèn SQL và bộ dữ liệu cho phương thức
    query = """Update employee set Salary = %s where id = %s"""
    tuple1 = [8000, 5]
    cursor.execute[query, tuple1]
    3, hãy nhớ rằng bộ dữ liệu chứa dữ liệu người dùng theo thứ tự tuần tự của trình giữ chỗ
  • Cuối cùng, chúng tôi cam kết các thay đổi của mình đối với cơ sở dữ liệu bằng cách sử dụng
    query = """Update employee set Salary = %s where id = %s"""
    tuple1 = [8000, 5]
    cursor.execute[query, tuple1]
    8
  • Chúng tôi đã đặt tất cả mã của mình vào khối thử ngoại trừ để bắt ngoại lệ nếu có

Ghi chú. Bạn cũng có thể tạo câu lệnh đã chuẩn bị sẵn bằng cách chuyển rõ ràng lớp MySQLCursorPrepared làm đối số trong khi tạo con trỏ.   

connection.cursor[cursor_class=MySQLCursorPrepared]

Sử dụng Truy vấn được tham số hóa Cập nhật dữ liệu của bảng MySQL

Hãy xem cách cập nhật bảng MySQL bằng Python. Trong ví dụ này, chúng tôi đang cập nhật mức lương của một nhân viên bằng truy vấn được tham số hóa

import mysql.connector

try:
    connection = mysql.connector.connect[host='localhost',
                                         database='python_db',
                                         user='pynative',
                                         password='pynative@#29']

    cursor = connection.cursor[prepared=True]
    sql_update_query = """UPDATE Employee set Salary = %s where Id = %s"""

    data_tuple = [12000, 1]
    cursor.execute[sql_update_query, data_tuple]
    connection.commit[]
    print["Employee table updated using the prepared statement"]

except mysql.connector.Error as error:
    print["parameterized query failed {}".format[error]]
finally:
    if connection.is_connected[]:
        cursor.close[]
        connection.close[]
        print["MySQL connection is closed"]

đầu ra

Employee table updated using the prepared statement
MySQL connection is closed

Sử dụng truy vấn được tham số hóa và câu lệnh đã chuẩn bị để xóa dữ liệu khỏi bảng MySQL

Bây giờ, hãy xem cách sử dụng câu lệnh đã chuẩn bị và truy vấn được tham số hóa để xóa dữ liệu của bảng MySQL khỏi Python

Ví dụ: khi người dùng xóa dữ liệu của họ khỏi cổng web. Trong trường hợp như vậy, chúng ta cần sử dụng các biến đó bên trong truy vấn được tham số hóa bằng cách sử dụng trình giữ chỗ [

query = """Update employee set Salary = %s where id = %s"""
tuple1 = [8000, 5]
cursor.execute[query, tuple1]
0]

import mysql.connector

try:
    connection = mysql.connector.connect[host='localhost',
                                         database='python_db',
                                         user='pynative',
                                         password='pynative@#29']

    cursor = connection.cursor[prepared=True]
    sql_Delete_query = """Delete from employee where id = %s"""
    empId = 2

    cursor.execute[sql_Delete_query, [empId,]]
    connection.commit[]
    print["Record Deleted successfully using Parameterized query"]

except mysql.connector.Error as error:
    print["parameterized query failed {}".format[error]]
finally:
    if connection.is_connected[]:
        cursor.close[]
        connection.close[]
        print["MySQL connection is closed"]

đầu ra

Record Deleted successfully using Parameterized query
MySQL connection is closed

Hoạt động của một truy vấn được tham số hóa

Lần đầu tiên bạn chuyển một câu lệnh truy vấn SQL tới phương thức exec[] của con trỏ, nó sẽ tạo ra câu lệnh đã chuẩn bị

Đối với các yêu cầu thực thi tiếp theo, giai đoạn chuẩn bị sẽ bị bỏ qua nếu câu lệnh SQL giống nhau, tôi. e. , truy vấn không được biên dịch lại

  • Trong câu lệnh đầu tiên
    import mysql.connector
    connection = mysql.connector.connect[host='localhost',
                                 database='python_db',
                                 user='pynative',
                                 password='pynative@#29']
    
    # this will retun MySQLCursorPrepared object
    cursor = connection.cursor[prepared=True]
    0 Python chuẩn bị i. e. Truy vấn được biên dịch
  • Đối với các lệnh gọi thực hiện tiếp theo của
    import mysql.connector
    connection = mysql.connector.connect[host='localhost',
                                 database='python_db',
                                 user='pynative',
                                 password='pynative@#29']
    
    # this will retun MySQLCursorPrepared object
    cursor = connection.cursor[prepared=True]
    0, Truy vấn được thực hiện trực tiếp với các giá trị tham số đã truyền

Bước tiếp theo

Để thực hành những gì bạn đã học trong bài viết này, Vui lòng giải một dự án Bài tập Cơ sở dữ liệu Python để Thực hành và thành thạo các thao tác Cơ sở dữ liệu Python

Câu lệnh chuẩn bị sẵn trong MySQL là gì?

Câu lệnh chuẩn bị là một tính năng được sử dụng để thực thi lặp đi lặp lại các câu lệnh SQL giống nhau [hoặc tương tự] với hiệu quả cao . Các báo cáo đã chuẩn bị về cơ bản hoạt động như thế này. Chuẩn bị. Mẫu câu lệnh SQL được tạo và gửi đến cơ sở dữ liệu. Một số giá trị không được chỉ định, được gọi là tham số [được gắn nhãn "?"].

MySQL có hỗ trợ các câu lệnh đã chuẩn bị không?

MySQL 8. 0 cung cấp hỗ trợ cho câu lệnh chuẩn bị phía máy chủ . Hỗ trợ này tận dụng giao thức nhị phân máy khách/máy chủ hiệu quả. Sử dụng các câu lệnh đã chuẩn bị với các trình giữ chỗ cho các giá trị tham số có các lợi ích sau. Ít chi phí hơn để phân tích câu lệnh mỗi khi nó được thực thi.

Làm cách nào để chuyển truy vấn tới MySQL bằng Python?

Các bước tìm nạp hàng từ bảng cơ sở dữ liệu MySQL .
Kết nối với MySQL từ Python. .
Xác định truy vấn CHỌN SQL. .
Nhận đối tượng con trỏ từ kết nối. .
Thực thi truy vấn SELECT sử dụng phương thức exec[]. .
Trích xuất tất cả các hàng từ một kết quả. .
Lặp lại từng hàng. .
Đóng đối tượng con trỏ và đối tượng kết nối cơ sở dữ liệu

Chuẩn bị câu lệnh SQL là gì?

Báo cáo đã chuẩn bị là gì? . Lệnh SQL được thực thi an toàn, ngăn ngừa lỗ hổng SQL Injection. a parameterized and reusable SQL query which forces the developer to write the SQL command and the user-provided data separately. The SQL command is executed safely, preventing SQL Injection vulnerabilities.

Chủ Đề