Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Quản lý hợp lý tài nguyên cơ sở dữ liệu:con trỏ và kết nối

Điều này có vẻ giống như một trường hợp sử dụng tuyệt vời cho một trình quản lý ngữ cảnh python . Trình quản lý ngữ cảnh cho phép bạn quản lý tài nguyên đúng cách , chẳng hạn như kết nối cơ sở dữ liệu, bằng cách cho phép bạn chỉ định cách thức hoạt động của các phương pháp thiết lập và chia nhỏ tài nguyên của bạn . Bạn có thể tạo trình quản lý ngữ cảnh tùy chỉnh của riêng mình theo một trong hai cách:Thứ nhất, bằng cách gói lớp cơ sở dữ liệu của bạn và triển khai các phương thức cần thiết cho trình quản lý ngữ cảnh:__init__() , __enter__()__exit__() . Thứ hai, bằng cách sử dụng @contextmanager trang trí trên một định nghĩa hàm và tạo một trình tạo cho tài nguyên cơ sở dữ liệu của bạn trong định nghĩa hàm đã nói. Tôi sẽ chỉ ra cả hai cách tiếp cận và để bạn quyết định cách nào là sở thích của bạn. __init__() phương thức là phương thức khởi tạo cho trình quản lý ngữ cảnh tùy chỉnh của bạn, tương tự như phương thức khởi tạo được sử dụng cho các lớp python tùy chỉnh. __enter__() phương pháp là mã thiết lập của bạn cho trình quản lý ngữ cảnh tùy chỉnh của bạn. Cuối cùng, __exit()__ phương pháp là giọt nước mắt của bạn mã cho trình quản lý ngữ cảnh tùy chỉnh của bạn. Cả hai cách tiếp cận đều sử dụng các phương pháp này với sự khác biệt chính là phương thức đầu tiên sẽ trình bày rõ ràng các phương thức này trong định nghĩa lớp của bạn. Trong trường hợp như trong cách tiếp cận thứ hai, tất cả mã cho đến yield của trình tạo của bạn câu lệnh là mã khởi tạo và thiết lập của bạn và tất cả mã sau yield tuyên bố là mã giọt nước mắt của bạn. Tôi cũng sẽ xem xét việc trích xuất các hành động cơ sở dữ liệu dựa trên người dùng của bạn vào một lớp mô hình người dùng. Vài nét về:

trình quản lý ngữ cảnh tùy chỉnh:( cách tiếp cận dựa trên lớp ):

import pymysql

class MyDatabase():
    def __init__(self):
        self.host = '127.0.0.1'
        self.user = 'root'
        self.password = ''
        self.db = 'API'

        self.con = None
        self.cur = None

    def __enter__(self):
        # connect to database
        self.con = pymysql.connect(host=self.host, user=self.user, password=self.password, db=self.db, cursorclass=pymysql.cursors.DictCursor, autocommit=True)
        self.cur = self.con.cursor()
        return self.cur

    def __exit__(self, exc_type, exc_val, traceback):
        # params after self are for dealing with exceptions
        self.con.close()

user.py (tái cấu trúc) :'

# import your custom context manager created from the step above
# if you called your custom context manager file my_database.py: from my_database import MyDatabase

import <custom_context_manager>

class User:
    def getUser(self, id):
        sql = 'SELECT * from users where id = %d'
        with MyDatabase() as db: 
            db.execute(sql, (id))
            result = db.fetchall()

        return result

    def getAllUsers(self):
        sql = 'SELECT * from users'
        with MyDatabase() as db: 
            db.execute(sql)
            result = db.fetchall()
        return result

    def AddUser(self, firstName, lastName, email):
        sql = "INSERT INTO `users` (`firstName`, `lastName`, `email`) VALUES (%s, %s, %s)"
        with MyDatabase() as db:
            db.execute(sql, (firstName, lastName, email))

trình quản lý ngữ cảnh (phương pháp trang trí) :

from contextlib import contextmanager
import pymysql


@contextmanager
def my_database():
    try:
        host = '127.0.0.1'
        user = 'root'
        password = ''
        db = 'API'
        con = pymysql.connect(host=host, user=user, password=password, db=db, cursorclass=pymysql.cursors.DictCursor, autocommit=True)
        cur = con.cursor()
        yield cur
    finally:
        con.close()

Sau đó, trong User của bạn bạn có thể sử dụng trình quản lý ngữ cảnh bằng cách nhập tệp trước và sau đó sử dụng nó tương tự như trước đây:

with my_database() as db:
   sql = <whatever sql stmt you wish to execute>
   #db action 
   db.execute(sql)

Hy vọng rằng điều đó sẽ hữu ích!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tương tự văn bản dài MySQL trong Microsoft SQL?

  2. truy vấn mysql để chọn tất cả ngoại trừ một số thứ

  3. Kỳ lạ ở mọi nơi

  4. Báo cáo từ Double Entry Accounting

  5. Làm cách nào để đặt giá trị ban đầu và số tự động trong MySQL?