Python 的数据库连接函数

Database Connection Function for Python

我已经编写了一个使用 pymysql 连接到数据库的函数。这是我的代码:

def SQLreadrep(sql):
    connection=pymysql.connect(host=############,
                               user=#######,
                               password=########,
                               db=#########)
    with connection.cursor() as cursor:
            cursor.execute(sql)
            rows=cursor.fetchall()
    connection.commit()
    connection.close()
    return rows

我将 SQL 传递给此函数,并将 return 行传递给该函数。但是,我正在对数据库进行快速查询。 (类似于 "SELECT sku WHERE object='2J4423K')。

  1. 有什么方法可以避免这么多连接?
  2. 一开始我应该避免这么多连接吗?
  3. 我可以使用这么多连接和查询使服务器崩溃吗?

我先回答你最后一个问题。您的函数正在获取一个连接,但它在返回之前关闭了它。所以,我看不出为什么除非你是多线程或多处理,否则你会一次使用多个连接并且你不应该让服务器崩溃。

避免创建和关闭这么多连接的开销的方法是 "cache" 连接。一种方法是用 class:

替换你的函数
import pymysql

class DB(object):
    def __init__(self, datasource, db_user, db_password):
        self.conn = pymysql.connect(db=datasource, user=db_user, password=db_password)

    def __del__(self):
        self.conn.close()

    def query(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            self.conn.commit()
            return cursor.fetchall()

然后实例化 DB class 的实例并调用它的 query 方法。当DB实例被抓取时,连接会自动关闭