Hướng dẫn python mysqldb connection close - đóng kết nối python mysqldb

Tôi sẽ lặp lại cách thực hành tốt nhất tại tất cả những người bắt gặp kết nối SQL bằng MySQLDB hoặc bất kỳ gói nào khác để kết nối Python2/3 cần biết điều này

. Nếu kết nối của bạn là cục bộ (cùng một máy) thì đó là 127.0.0.1 còn được gọi là "localhost".

Quá trình này là đơn giản 7 bước

  1. Tạo kết nối
  2. Tạo con trỏ
  3. Tạo chuỗi truy vấn
  4. Thực hiện truy vấn
  5. Cam kết truy vấn
  6. Đóng con trỏ
  7. Đóng kết nối

Đây là một bước đơn giản của STEM Mock Run

mydb = MySQLdb.connect(host=host, user=user, passwd=passwd, db=database, charset="utf8")
cursor = mydb.cursor()
query = "INSERT INTO tablename (text_for_field1, text_for_field2, text_for_field3, text_for_field4) VALUES (%s, %s, %s, %s)"
cursor.execute(query, (field1, field2, field3, field4))
mydb.commit()
cursor.close()
mydb.close()

Kết nối và con trỏ là khác nhau. Kết nối ở cấp SQL trong khi con trỏ có thể được coi là một yếu tố dữ liệu. Bạn có thể có nhiều con trỏ trên cùng một dữ liệu trong một kết nối đơn. Đó là một sự xuất hiện bất thường khi có nhiều kết nối với cùng một dữ liệu từ cùng một máy tính.

Nhiều người đã được mô tả ở đây "Mô hình con trỏ không cụ thể cho Python nhưng là một cấu trúc dữ liệu thường xuyên trong cơ sở dữ liệu.

Tùy thuộc vào việc triển khai cơ bản, có thể tạo ra một số con trỏ chia sẻ cùng một kết nối với cơ sở dữ liệu. Đóng con trỏ phải tài nguyên miễn phí liên quan đến truy vấn, bao gồm mọi kết quả không bao giờ được tìm nạp từ DB (hoặc được tìm nạp nhưng không được sử dụng) nhưng sẽ không loại bỏ kết nối với cơ sở dữ liệu để bạn có thể có được một con trỏ mới trên cùng một cơ sở dữ liệu không cần phải xác thực một lần nữa. "

Dưới đây là hàm Get_Emp_No, tham số đầu vào là p_Emp_Id và trả về Emp_No (Mã nhân viên).

Có thể bạn quan tâm

cnx.close()

Đây là các khóa học trực tuyến bên ngoài website o7planning mà chúng tôi giới thiệu, nó có thể bao gồm các khóa học miễn phí hoặc giảm giá.

10.2.2 MySQLConnection.close() Method

10- Gọi Hàm

Hướng dẫn python mysqldb connection close - đóng kết nối python mysqldb
Để gọi hàm (function) trong Python, bạn nên tạo một câu truy vấn (query clause), và thực thi câu lệnh truy vấn này.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.

Hướng dẫn python mysqldb connection close - đóng kết nối python mysqldb
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook
Hướng dẫn python mysqldb connection close - đóng kết nối python mysqldb
Facebook

1- PyMySQL là gì?

Để kết nối từ Python vào một cơ sở dữ liệu bạn cần một Driver (bộ điều khiển), nó là một thư viện dùng để nói chuyện với cơ sở dữ liệu. Với cơ sở dữ liệu MySQL bạn có 3 sự lựa chọn Driver như vậy: Python vào một cơ sở dữ liệu bạn cần một Driver (bộ điều khiển), nó là một thư viện dùng để nói chuyện với cơ sở dữ liệu. Với cơ sở dữ liệu MySQL bạn có 3 sự lựa chọn Driver như vậy:

  1. MySQL/connector for Python
  2. MySQLdb
  3. PyMySQL

Driver Mô tả
MySQL/Connector for Python Đây là một thư viện được cung cấp bởi chính cộng đồng MySQL. MySQL.
MySQLdb MySQLdb là thư viện giúp kết nối vào MySQL từ Python, nó được viết trên ngôn ngữ C, nó được cung cấp miễn phí và là mã nguồn mở. là thư viện giúp kết nối vào MySQL từ Python, nó được viết trên ngôn ngữ C, nó được cung cấp miễn phí và là mã nguồn mở.
PyMySQL Đây là một thư viện giúp kết nối vào MySQL từ Python, là một thư viện thuần Python. Mục tiêu của PyMySQL là thay thế cho MySQLdb và làm việc trên CPython, PyPy và IronPython. MySQL từ Python, là một thư viện thuần Python. Mục tiêu của PyMySQL là thay thế cho MySQLdb và làm việc trên CPython, PyPyIronPython.

PyMySQL là một dự án mã nguồn mở, và mã nguồn của nó bạn có thể xem tại đây: là một dự án mã nguồn mở, và mã nguồn của nó bạn có thể xem tại đây:

2- Cài đặt PyMySQL

Để cài đặt PyMySQL trên Windows (Hoặc Ubuntu/Linux) bạn cần mở cửa sổ CMD, và thực thi lệnh sau: PyMySQL trên Windows (Hoặc Ubuntu/Linux) bạn cần mở cửa sổ CMD, và thực thi lệnh sau:

Hướng dẫn python mysqldb connection close - đóng kết nối python mysqldb

3- Database mẫu

"simplehr" là một cơ sở dữ liệu mẫu, được sử dụng trong nhiều hướng dẫn trên o7planning. Trong bài viết này tôi cũng sử dụng nó. Bạn có thể tạo cơ sở dữ liệu này theo hướng dẫn dưới đây: là một cơ sở dữ liệu mẫu, được sử dụng trong nhiều hướng dẫn trên o7planning. Trong bài viết này tôi cũng sử dụng nó. Bạn có thể tạo cơ sở dữ liệu này theo hướng dẫn dưới đây:

Hướng dẫn python mysqldb connection close - đóng kết nối python mysqldb

4- Kết nối MySQL từ Python với PyMySQL

Ví dụ đơn giản sau sử dụng Python kết nối vào MySQL và truy vấn bảng Department: Python kết nối vào MySQL và truy vấn bảng Department:

connectExample.py


import pymysql.cursors   
# Kết nối vào database.
connection = pymysql.connect(host='192.168.5.134',
                             user='root',
                             password='1234',                             
                             db='simplehr',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor) 
print ("connect successful!!") 
try:  
    with connection.cursor() as cursor: 
        # SQL 
        sql = "SELECT Dept_No, Dept_Name FROM Department " 
        # Thực thi câu lệnh truy vấn (Execute Query).
        cursor.execute(sql) 
        print ("cursor.description: ", cursor.description) 
        print() 
        for row in cursor:
            print(row) 
finally:
    # Đóng kết nối (Close connection).       
    connection.close()

Kết quả chạy ví dụ:


connect successful!!
cursor.description: (('Dept_No', 253, None, 80, 80, 0, False), ('Dept_Name', 253, None, 1020, 1020, 0, False))

{'Dept_No': 'D10', 'Dept_Name': 'ACCOUNTING'}
{'Dept_No': 'D20', 'Dept_Name': 'RESEARCH'}
{'Dept_No': 'D30', 'Dept_Name': 'SALES'}
{'Dept_No': 'D40', 'Dept_Name': 'OPERATIONS'}

Module tiện ích:

Một lời khuyên là bạn nên tạo ra một module tiện ích để tạo một kết nối tới cơ sở dữ liệu. Ở đây tôi tạo một module có tên "myconnutils", module này định nghĩa hàm getConnection() trả về một connection. module tiện ích để tạo một kết nối tới cơ sở dữ liệu. Ở đây tôi tạo một module có tên "myconnutils", module này định nghĩa hàm getConnection() trả về một connection.

myconnutils.py


import pymysql.cursors   
# Hàm trả về một connection.
def getConnection(): 
    # Bạn có thể thay đổi các thông số kết nối.
    connection = pymysql.connect(host='192.168.5.129',
                                 user='root',
                                 password='1234',                             
                                 db='simplehr',
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    return connection

5- Ví dụ Query

Ví dụ sau đây truy vấn bảng Employee, Python sử dụng %s như là một "nơi giữ chỗ" (placeholder) cho các tham số, nó không phụ thuộc kiểu của tham số. Ví dụ: Python sử dụng %s như là một "nơi giữ chỗ" (placeholder) cho các tham số, nó không phụ thuộc kiểu của tham số. Ví dụ:


sql1 = "Insert into Department (Dept_Id, Dept_No, Dept_Name) values (%s, %s, %s) "

sql2 = "Select * from Employee Where Dept_Id = %s "

queryExample.py


# Sử dụng module tiện ích của bạn.
import myconnutils 

connection = myconnutils.getConnection() 
print ("Connect successful!") 
sql = "Select Emp_No, Emp_Name, Hire_Date from Employee Where Dept_Id = %s " 
try :
    cursor = connection.cursor() 
    # Thực thi sql và truyền 1 tham số.
    cursor.execute(sql, ( 10 ) )  
    print ("cursor.description: ", cursor.description) 
    print() 
    for row in cursor:
        print (" ----------- ")
        print("Row: ", row)
        print ("Emp_No: ", row["Emp_No"])
        print ("Emp_Name: ", row["Emp_Name"])
        print ("Hire_Date: ", row["Hire_Date"] , type(row["Hire_Date"]) ) 
finally:
    # Đóng kết nối
    connection.close()

Hướng dẫn python mysqldb connection close - đóng kết nối python mysqldb

6- Ví dụ Insert

insertExample.py


# Sử dụng module tiện ích của bạn.
import myconnutils
import pymysql.cursors  

connection = myconnutils.getConnection() 
print ("Connect successful!")  
try :
    cursor = connection.cursor() 
    sql = "Select max(Grade) as Max_Grade from Salary_Grade "
    cursor.execute(sql) 
    # 1 dòng dữ liệu
    oneRow = cursor.fetchone()      

    # Output: {'Max_Grade': 4} or {'Max_Grade': None}
    print ("Row Result: ", oneRow) 
    grade = 1
    
    if oneRow != None and oneRow["Max_Grade"] != None:
        grade = oneRow["Max_Grade"] + 1 
    cursor = connection.cursor()  
    sql =  "Insert into Salary_Grade (Grade, High_Salary, Low_Salary) " \
         + " values (%s, %s, %s) " 
    print ("Insert Grade: ", grade)  
    # Thực thi sql và truyền 3 tham số
    cursor.execute(sql, (grade, 2000, 1000 ) ) 
    connection.commit()  
finally: 
    connection.close()

Output:


connect successful!!
Row Result: {'Max_Grade': 2}
Insert Grade: 3

7- Ví dụ Update

updateExample.py


# Sử dụng module tiện ích của bạn.
import myconnutils
import pymysql.cursors 
import datetime 

connection = myconnutils.getConnection() 
print ("Connect successful!")  
try :
    cursor = connection.cursor() 
    sql = "Update Employee set Salary = %s, Hire_Date = %s where Emp_Id = %s "   
    # Hire_Date
    newHireDate = datetime.date(2002, 10, 11) 
    # Thực thi sql và truyền 3 tham số.
    rowCount = cursor.execute(sql, (850, newHireDate, 7369 ) ) 
    connection.commit()  
    print ("Updated! ", rowCount, " rows") 
finally:
    # Đóng kết nối    
    connection.close()

Output:

cnx.close()
0

7- Ví dụ Update

deleteExample.py

cnx.close()
1

Output:

cnx.close()
2

7- Ví dụ Update

8- Ví dụ Delete Python. Tôi đặt ra môt tình huống như sau:

9- Gọi Thủ tục

  • Có một vài vấn đề khi bạn gọi một hàm (function) hoặc một thủ tục (procedure) trong Python. Tôi đặt ra môt tình huống như sau:

Bạn có một thủ tục:

cnx.close()
3

Get_Employee_Info(p_Emp_Id, v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date)p_Emp_Id và 4 tham số đầu ra v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date, bạn gọi một thủ tục này từ Python truyền vào giá trị cho p_Emp_Id để lấy ra 4 giá trị đầu ra. Thật đáng tiếc giá trị nhận được không được đảm bảo đúng (Điều này được nói rõ trong đặc tả DB-API). Python chỉ có thể lấy ra các giá trị từ một mệnh đề SELECT.

get_Employee_Info

cnx.close()
4

Thủ tục trên có 1 tham số đầu vào p_Emp_Id và 4 tham số đầu ra v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date, bạn gọi một thủ tục này từ Python truyền vào giá trị cho p_Emp_Id để lấy ra 4 giá trị đầu ra. Thật đáng tiếc giá trị nhận được không được đảm bảo đúng (Điều này được nói rõ trong đặc tả DB-API). Python chỉ có thể lấy ra các giá trị từ một mệnh đề SELECT. Get_Employee_Info ở trên bởi một thủ tục khác (Chẳng hạn Get_Employee_Info_Wrap), thủ tục này trả về các giá tri thông qua mệnh đề SELECT (Select clause).

get_Employee_Info_Wrap

cnx.close()
5

Đặc tả DB-API: Get_Employee_Info trong Python, hãy gọi thủ tục Get_Employee_Info_Wrap.

callProcedureExample.py

cnx.close()
6

Tuy vậy bạn vẫn có thể giải quyết được vấn đề ở trên, bạn cần phải bao bọc (wrap) thủ tục Get_Employee_Info ở trên bởi một thủ tục khác (Chẳng hạn Get_Employee_Info_Wrap), thủ tục này trả về các giá tri thông qua mệnh đề SELECT (Select clause).

cnx.close()
7

Thay vì gọi thủ tục Get_Employee_Info trong Python, hãy gọi thủ tục Get_Employee_Info_Wrap.

Chạy ví dụ: Python, bạn nên tạo một câu truy vấn (query clause), và thực thi câu lệnh truy vấn này.

10- Gọi Hàm Get_Emp_No, tham số đầu vào là p_Emp_Id và trả về Emp_No (Mã nhân viên).

Get_Emp_No

cnx.close()
8

callFunctionExample.py

cnx.close()
9

Tuy vậy bạn vẫn có thể giải quyết được vấn đề ở trên, bạn cần phải bao bọc (wrap) thủ tục Get_Employee_Info ở trên bởi một thủ tục khác (Chẳng hạn Get_Employee_Info_Wrap), thủ tục này trả về các giá tri thông qua mệnh đề SELECT (Select clause).


import pymysql.cursors   
# Kết nối vào database.
connection = pymysql.connect(host='192.168.5.134',
                             user='root',
                             password='1234',                             
                             db='simplehr',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor) 
print ("connect successful!!") 
try:  
    with connection.cursor() as cursor: 
        # SQL 
        sql = "SELECT Dept_No, Dept_Name FROM Department " 
        # Thực thi câu lệnh truy vấn (Execute Query).
        cursor.execute(sql) 
        print ("cursor.description: ", cursor.description) 
        print() 
        for row in cursor:
            print(row) 
finally:
    # Đóng kết nối (Close connection).       
    connection.close()
0

Thay vì gọi thủ tục Get_Employee_Info trong Python, hãy gọi thủ tục Get_Employee_Info_Wrap.

Chạy ví dụ: