Phương thức này thực thi cơ sở dữ liệu đã cho operation (truy vấn hoặc lệnh). Các tham số được tìm thấy trong tuple hoặc từ điển params được liên kết với các biến trong hoạt động. Chỉ định các biến bằng cách sử dụng kiểu tham số %s hoặc ____ 10) (nghĩa là sử dụng kiểu
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.
Ví dụ này chèn thông tin về một nhân viên mới, sau đó chọn dữ liệu cho người đó. Các câu lệnh được thực thi dưới dạng các hoạt động
3 có thể thực thi nhiều câu lệnh được chỉ định trong chuỗi operation. Nó trả về một trình lặp cho phép xử lý kết quả của mỗi câu lệnh. Tuy nhiên, sử dụng các tham số không hoạt động tốt trong trường hợp này và thường là một ý tưởng tốt để tự thực hiện từng câu lệnh.
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
Nếu kết nối được cấu hình để tìm nạp các cảnh báo, các cảnh báo được tạo bởi hoạt động có sẵn thông qua phương thức mysqlcursor.fetchwarnings ().
Một kết nối với máy chủ MySQL có thể được thiết lập bằng hàm
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
4 hoặc lớp
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
Bảng sau đây mô tả các đối số có thể được sử dụng để bắt đầu kết nối. Dấu hoa thị (*) theo một đối số cho biết tên đối số đồng nghĩa, chỉ có sẵn để tương thích với các trình điều khiển Python MySQL khác. Oracle khuyến nghị không sử dụng các tên thay thế này.
Bảng & nbsp; 7.1 & nbsp; đối số kết nối cho đầu nối/python
Tên đối số
Mặc định
Sự mô tả
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
6 (____ 27*)
Tên người dùng được sử dụng để xác thực với máy chủ MySQL.
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
8 (________ 29*)
Mật khẩu để xác thực người dùng với máy chủ MySQL.
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())
0
Giá trị
from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())
1 tiêu chuẩn được gửi; Sử dụng
from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())
0 để tùy chọn đặt các thuộc tính kết nối tùy chỉnh bổ sung như được xác định bởi một từ điển, chẳng hạn như config ['Conn_attrs'] = {"foo": "Bar"}.config['conn_attrs'] = {"foo": "bar"}.
Các triển khai Python C-Ext và Pure Python khác nhau. Việc triển khai C-ext phụ thuộc vào thư viện MySQLClient để các giá trị Conn_attrs tiêu chuẩn của nó bắt nguồn từ nó. Ví dụ: '_client_name' là 'libmysql' với c-ext nhưng 'mysql-connector-python' với python thuần túy. C-ext thêm các thuộc tính bổ sung này: '_connector_version', '_connector_license', '_connector_name' và '_source_host'.
Tùy chọn này đã được thêm vào trong 8.0.17, như là hành vi phiên bản mặc định_connect_attrs.
from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())
3
Plugin xác thực để sử dụng. Được thêm vào 1.2.1.
from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())
4
Một cuộc gọi được xác định bởi tùy chọn
from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())
4 tùy chọn được thực thi khi nó sẵn sàng cho tương tác người dùng với thiết bị FIDO phần cứng. Tùy chọn này có thể là một đối tượng có thể gọi được hoặc đường dẫn chuỗi mà trình kết nối có thể nhập trong thời gian chạy và thực thi. Nó không chặn và chỉ được sử dụng để thông báo cho người dùng về nhu cầu tương tác với thiết bị FIDO phần cứng.
Chức năng này chỉ có sẵn trong phần mở rộng C. Một NotSupportedError được nâng lên khi sử dụng triển khai Python thuần túy.NotSupportedError is raised when using the
pure Python implementation.
from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())
5 Tắt việc sử dụng SSL/TLS. Các giao thức kết nối TLSV1 và TLSV1.1 được không dùng nữa là đầu nối/Python 8.0.26 và được loại bỏ như đầu nối/Python 8.0.28.
5, hãy kiểm tra chứng chỉ máy chủ đối với tệp chứng chỉ được chỉ định bởi tùy chọn operation2. Bất kỳ sự không phù hợp nào cũng gây ra ngoại lệ params2.
5, hãy thực hiện thêm xác minh nhận dạng tên máy chủ bằng cách kiểm tra tên máy chủ mà máy khách sử dụng để kết nối với máy chủ với danh tính trong chứng chỉ mà máy chủ gửi cho máy khách. Tùy chọn được thêm vào đầu nối/Python 8.0.14.
5, hãy kiểm tra chứng chỉ máy chủ đối với tệp chứng chỉ được chỉ định bởi tùy chọn operation2. Bất kỳ sự không phù hợp nào cũng gây ra ngoại lệ params2.
5, hãy thực hiện thêm xác minh nhận dạng tên máy chủ bằng cách kiểm tra tên máy chủ mà máy khách sử dụng để kết nối với máy chủ với danh tính trong chứng chỉ mà máy chủ gửi cho máy khách. Tùy chọn được thêm vào đầu nối/Python 8.0.14.
Tùy chọn xác định một đường dẫn cụ thể đến tệp cấu hình xác thực phía máy chủ %s1.
Không được hỗ trợ (tăng %s3 khi sử dụng).
Tên nhóm kết nối. Tên nhóm được giới hạn ở các ký tự chữ và số và các ký tự đặc biệt %s5, %s6, %s7, %s8 và %s9. Tên nhóm phải dài không quá insert_stmt = (
"INSERT INTO employees (emp_no, first_name, last_name, hire_date) "
"VALUES (%s, %s, %s, %s)"
)
data = (2, 'Jane', 'Doe', datetime.date(2012, 3, 23))
cursor.execute(insert_stmt, data)
select_stmt = "SELECT * FROM employees WHERE emp_no = %(emp_no)s"
cursor.execute(select_stmt, { 'emp_no': 2 })00 ký tự (mặc định 64).
Kích thước nhóm kết nối. Kích thước nhóm phải lớn hơn 0 và nhỏ hơn hoặc bằng
Có đặt lại các biến phiên khi kết nối được trả về nhóm.
Có sử dụng giao thức máy khách/máy chủ nén hay không.
Lớp chuyển đổi để sử dụng.
Bật chuyển đổi thành STR của các loại giá trị không được hỗ trợ bởi lớp chuyển đổi đầu nối/Python hoặc bởi một lớp chuyển đổi tùy chỉnh.
Trình kết nối MySQL/Python không hỗ trợ các giao thức mật khẩu cũ, kém an toàn của các phiên bản MySQL trước 4.1.
Trình kết nối/Python hỗ trợ giao thức xác thực Kerberos để xác thực không có mật khẩu. Các máy khách Linux được hỗ trợ kể từ Trình kết nối/Python 8.0.26 và hỗ trợ Windows đã được thêm vào đầu nối/Python 8.0.27 với triển khai mở rộng C và trong Trình kết nối/Python 8.0.29 với việc triển khai Python thuần túy.
Trình kết nối/Python hỗ trợ xác thực đa yếu tố (MFA) kể từ V8.0.28 bằng cách sử dụng
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
Trình kết nối/Python hỗ trợ xác thực có thể cắm FIDO như Trình kết nối/Python 8.0,29; Một cơ chế xác thực được thêm vào trong MySQL Enterprise Edition 8.0.27.
Hạn chế: Chức năng xác thực FIDO chỉ có sẵn trong triển khai mở rộng C (được cài đặt theo mặc định); Một NotSupportedError được nâng lên khi sử dụng triển khai Python thuần túy của đầu nối này. Ngoài ra, chỉ có cấu trúc 2 cấp được hỗ trợ, trong đó đầu nối và phím vật lý nằm trên cùng một máy.NotSupportedError is raised when using the pure Python implementation of this connector. Also only a 2-level structure is supported, in that the connector and the physical key are on the same machine.
Xem Xác thực có thể cắm FIDO để biết chi tiết cài đặt và tùy chọn sử dụng tùy chọn Kết nối đầu nối/Python Fido_Callback để thông báo cho người dùng rằng họ cần chạm vào thiết bị phần cứng.
Mã hóa ký tự
Theo mặc định, các chuỗi đến từ MySQL được trả lại dưới dạng chữ Python Unicode. Để thay đổi hành vi này, đặt
from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())
28 trong ứng dụng của bạn sau khi thực hiện một tập hợp các hoạt động chèn, cập nhật và xóa liên quan. Đối với tính nhất quán của dữ liệu và thông lượng cao cho các hoạt động ghi, tốt nhất bạn nên tắt tùy chọn cấu hình
Theo mặc định, Trình kết nối/Python MySQL không đệm hoặc kết quả trước. Điều này có nghĩa là sau khi truy vấn được thực thi, chương trình của bạn chịu trách nhiệm tìm nạp dữ liệu. Điều này tránh sử dụng bộ nhớ quá mức khi các truy vấn trả về các bộ kết quả lớn. Nếu bạn biết rằng tập kết quả đủ nhỏ để xử lý tất cả cùng một lúc, bạn có thể tìm nạp kết quả ngay lập tức bằng cách đặt
# Note (Example is valid for Python v2 and v3)
from __future__ import print_function
import sys
#sys.path.insert(0, 'python{0}/'.format(sys.version_info[0]))
import mysql.connector
from mysql.connector.constants import ClientFlag
config = {
'user': 'ssluser',
'password': 'password',
'host': '127.0.0.1',
'client_flags': [ClientFlag.SSL],
'ssl_ca': '/opt/mysql/ssl/ca.pem',
'ssl_cert': '/opt/mysql/ssl/client-cert.pem',
'ssl_key': '/opt/mysql/ssl/client-key.pem',
}
cnx = mysql.connector.connect(**config)
cur = cnx.cursor(buffered=True)
cur.execute("SHOW STATUS LIKE 'Ssl_cipher'")
print(cur.fetchone())
cur.close()
cnx.close()
5. Cũng có thể đặt điều này trên mỗi con trỏ (xem Phần & NBSP; 10.2.6, MySqlConnection.cursor () phương thức).
Kết quả được tạo bởi các truy vấn thường không được đọc cho đến khi chương trình khách hàng tìm nạp chúng. Để tự động tiêu thụ và loại bỏ các bộ kết quả, hãy đặt tùy chọn operation0 thành
5. Kết quả là tất cả các kết quả được đọc, mà đối với các bộ kết quả lớn có thể chậm. (Trong trường hợp này, có thể tốt hơn là đóng và mở lại kết nối.)
Nhập chuyển đổi
Theo mặc định, các loại MySQL trong các bộ kết quả được chuyển đổi tự động thành các loại Python. Ví dụ: giá trị cột
5. Bạn có thể làm điều này để có được hiệu suất tốt hơn hoặc tự mình thực hiện các loại chuyển đổi khác nhau.
Kết nối thông qua SSL
Sử dụng kết nối SSL là có thể khi cài đặt Python của bạn hỗ trợ SSL, nghĩa là khi nó được biên dịch với các thư viện OpenSSL. Khi bạn cung cấp các tùy chọn operation2, operation7 và operation3, kết nối sẽ chuyển sang SSL và tùy chọn
# Note (Example is valid for Python v2 and v3)
from __future__ import print_function
import sys
#sys.path.insert(0, 'python{0}/'.format(sys.version_info[0]))
import mysql.connector
from mysql.connector.constants import ClientFlag
config = {
'user': 'ssluser',
'password': 'password',
'host': '127.0.0.1',
'client_flags': [ClientFlag.SSL],
'ssl_ca': '/opt/mysql/ssl/ca.pem',
'ssl_cert': '/opt/mysql/ssl/client-cert.pem',
'ssl_key': '/opt/mysql/ssl/client-key.pem',
}
cnx = mysql.connector.connect(**config)
cur = cnx.cursor(buffered=True)
cur.execute("SHOW STATUS LIKE 'Ssl_cipher'")
print(cur.fetchone())
cur.close()
cnx.close()
Kể từ đầu nối/Python 2.2.2, nếu máy chủ MySQL hỗ trợ các kết nối SSL, Trình kết nối/Python sẽ cố gắng thiết lập kết nối an toàn (được mã hóa) theo mặc định, rơi trở lại kết nối không được mã hóa.
Từ Trình kết nối/Python 1.2.1 đến đầu nối/Python 2.2.1, có thể thiết lập kết nối SSL chỉ sử dụng opion operation2. Các đối số operation7 và operation3 là tùy chọn. Tuy nhiên, khi được đưa ra, cả hai phải được đưa ra hoặc
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
4). Điều này cung cấp một sự thay thế dễ dàng hơn để đặt cờ
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
03. Đối số này có sẵn như của Trình kết nối/Python 1.1.2.
90 được nâng lên nếu lớp chuyển đổi tùy chỉnh không phải là một lớp con của
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
10 cung cấp thông tin để sử dụng cho chuyển đổi dự phòng máy chủ trong trường hợp lỗi kết nối. Giá trị đối số là một tuple hoặc danh sách từ điển (tuple được ưa thích vì nó không thể). Mỗi từ điển chứa các đối số kết nối cho một máy chủ nhất định trong chuỗi chuyển đổi dự phòng. Giá trị từ điển được phép là:
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
6,
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
11: Các tệp tùy chọn nào cần đọc. Giá trị có thể là tên đường dẫn tệp (một chuỗi) hoặc chuỗi chuỗi tên đường dẫn. Theo mặc định, Trình kết nối/Python không có tệp tùy chọn nào, vì vậy đối số này phải được đưa ra một cách rõ ràng để gây ra các tệp tùy chọn được đọc. Các tập tin được đọc theo thứ tự được chỉ định.
12: Nhóm nào sẽ đọc từ các tệp tùy chọn, nếu các tệp tùy chọn được đọc. Giá trị có thể là một tên nhóm tùy chọn (một chuỗi) hoặc chuỗi các chuỗi tên nhóm. Nếu đối số này không được đưa ra, giá trị mặc định là
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
21 và
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
22.
Để biết thêm thông tin, xem Phần & NBSP; 7.2, Trình kết nối/hỗ trợ tùy chọn Python.
Tải dữ liệu cục bộ
Trước Trình kết nối/Python 2.0.0, để cho phép sử dụng
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
23, khách hàng phải đặt cờ
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
24 một cách rõ ràng. Tính đến 2.0.0, cờ này được bật theo mặc định. Để vô hiệu hóa nó, tùy chọn kết nối
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
# Note (Example is valid for Python v2 and v3)
from __future__ import print_function
import sys
#sys.path.insert(0, 'python{0}/'.format(sys.version_info[0]))
import mysql.connector
from mysql.connector.constants import ClientFlag
config = {
'user': 'ssluser',
'password': 'password',
'host': '127.0.0.1',
'client_flags': [ClientFlag.SSL],
'ssl_ca': '/opt/mysql/ssl/ca.pem',
'ssl_cert': '/opt/mysql/ssl/client-cert.pem',
'ssl_key': '/opt/mysql/ssl/client-key.pem',
}
cnx = mysql.connector.connect(**config)
cur = cnx.cursor(buffered=True)
cur.execute("SHOW STATUS LIKE 'Ssl_cipher'")
print(cur.fetchone())
cur.close()
cnx.close()
4 có giá trị đối với khả năng tương thích với các giao diện MYSQL khác và tương ứng giống như
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))