Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng các biến liên kết để truyền dữ liệu đến và từ Cơ sở dữ liệu Oracle
Giới thiệu về các biến liên kết
Nếu bạn muốn truyền dữ liệu đến và từ cơ sở dữ liệu Oracle, bạn sử dụng các trình giữ chỗ trong câu lệnh SQL như sau
Code language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = :customer_id']
Trong truy vấn này,
7 là một trình giữ chỗ. Nó còn được gọi là biến liên kết hoặc tham số liên kếtCode language: Python [python]
cursor.execute[sql,[100]]
Khi bạn thực hiện truy vấn bằng đối tượng
8, bạn cần chuyển giá trị của biến liên kếtCode language: Python [python]
cursor.execute[sql,[100]]
Code language: Python [python]
cursor.execute[sql,[100]]
Trong trường hợp này, số
9 sẽ được sử dụng cho biến liên kếtCode language: Python [python]
cursor.execute[sql,[100]]
7 trong câu lệnh SQL khi truy vấn được thực thiCode language: Python [python]
cursor.execute[sql,[100]]
Các biến liên kết làm cho mã an toàn hơn và giúp tránh các sự cố bảo mật SQL injection vì dữ liệu người dùng không bao giờ được coi là một phần của câu lệnh SQL thực thi
Nếu dữ liệu người dùng được nối với một câu lệnh SQL, nó sẽ dễ bị tấn công SQL injection
Code language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
Vì lý do này, cách tốt nhất là luôn sử dụng các biến liên kết trong truy vấn của bạn và không bao giờ nối hoặc nội suy dữ liệu người dùng vào một câu lệnh SQL như sau
Code language: Python [python]
sql = f"""select name from customers where customer_id = {id}"""
Bên cạnh lợi ích bảo mật, các biến liên kết có thể cải thiện hiệu suất của truy vấn nếu một câu lệnh SQL được thực thi nhiều lần với các giá trị khác nhau vì Oracle chỉ cần phân tích cú pháp và lưu trữ câu lệnh SQL một lần
Ví dụ sau minh họa cách tìm tên khách hàng theo id sử dụng biến liên kết
________số 8Lưu ý rằng đây là mô-đun
1 nếu bạn chưa làm theo hướng dẫn trước đóCode language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
0Code language: Python [python]
cursor.execute[sql,[100]]
Ràng buộc bởi tên
Nếu các biến liên kết được liên kết với tên, bạn đã đặt tên cho các liên kết. Các liên kết được đặt tên yêu cầu tên tham số từ khóa hoặc khóa của từ điển khớp với tên biến liên kết. Ví dụ
1Code language: Python [python]
cursor.execute[sql,[100]]
Biến liên kết
2 vàCode language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
3 được đặt tên là liên kếtCode language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
4Code language: Python [python]
cursor.execute[sql,[100]]
Khi thực thi câu lệnh SQL với các liên kết được đặt tên, bạn cần truyền các tên tham số từ khóa khớp với các liên kết được đặt tên
5Code language: Python [python]
cursor.execute[sql,[100]]
Ngoài ra, bạn có thể chuyển tham số dưới dạng từ điển thay vì tham số từ khóa
6Code language: Python [python]
cursor.execute[sql,[100]]
Ràng buộc theo tên cho phép bạn chỉ định tên có ý nghĩa và sử dụng chúng tự do ở bất kỳ vị trí nào
Ngoài ra, bạn chỉ cần xác định các tham số tên một lần nếu một biến được lặp lại nhiều lần trong một truy vấn
Ràng buộc bởi các vị trí
Một liên kết vị trí được thực hiện khi một danh sách các giá trị liên kết được chuyển đến lệnh gọi
4. Ví dụCode language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
0Code language: Python [python]
cursor.execute[sql,[100]]
Thứ tự của các giá trị liên kết phải khớp chính xác với thứ tự của từng biến liên kết. Nếu bạn sử dụng một biến liên kết nhiều lần trong truy vấn, bạn phải lặp lại các giá trị liên kết
hướng ràng buộc
Các biến liên kết có thể là
5 hoặcCode language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
6Code language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
Biến liên kết
5 cho phép bạn chuyển dữ liệu từ Python sang Cơ sở dữ liệu Oracle trong khi biến liên kếtCode language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
6 cho phép bạn lấy lại dữ liệu từ Cơ sở dữ liệu Oracle sang PythonCode language: Python [python]
sql = ['select name ' 'from customers ' 'where customer_id = ' + customer_id]
Trong các ví dụ trước, bạn đã chuyển các biến liên kết vào Cơ sở dữ liệu Oracle để truy vấn dữ liệu và sử dụng
8 để tìm nạp kết quảCode language: Python [python]
cursor.execute[sql,[100]]
Để Cơ sở dữ liệu Oracle trả dữ liệu về Python, bạn cần tạo một biến bằng cách sử dụng phương thức
0. Xem ví dụ sauCode language: Python [python]
sql = f"""select name from customers where customer_id = {id}"""
1Code language: Python [python]
cursor.execute[sql,[100]]
trong ví dụ này
Đầu tiên, khai báo một biến chứa khối PL/SQL ẩn danh
2Code language: Python [python]
cursor.execute[sql,[100]]
Thứ hai, kết nối với Cơ sở dữ liệu Oracle và tạo một đối tượng Con trỏ mới từ đối tượng Kết nối
Thứ ba, tạo một biến để giữ dữ liệu được trả về từ việc thực thi khối PL/SQL ẩn danh
3Code language: Python [python]
cursor.execute[sql,[100]]
Thứ tư, thực thi khối PL/SQL và nhận dữ liệu trả về
4Code language: Python [python]
cursor.execute[sql,[100]]
Cuối cùng, hiển thị giá trị của biến bằng cách gọi phương thức
1Code language: Python [python]
sql = f"""select name from customers where customer_id = {id}"""
5Code language: Python [python]
cursor.execute[sql,[100]]
đầu ra là
6Code language: Python [python]
cursor.execute[sql,[100]]
Trong hướng dẫn này, bạn đã học cách sử dụng các biến liên kết để truyền dữ liệu đến và từ Cơ sở dữ liệu Oracle