Python的数据库连接功能

时间:2019-04-24 15:12:46

标签: python database pymysql

我已经编写了使用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传递给此函数并返回行。但是,我正在快速查询数据库。 (类似于"SELECT sku WHERE object='2J4423K')。

  1. 如何避免这么多连接?
  2. 我应该避免这么多连接吗?
  3. 我可以使用这么多的连接和查询使服务器崩溃吗?

1 个答案:

答案 0 :(得分:1)

让我先回答您的最后一个问题。您的函数正在获取连接,但是在返回之前将其关闭。因此,我认为没有理由为什么除非您使用多线程或多处理功能,否则您一次将使用多个连接,并且不应该使服务器崩溃。

避免创建和关闭这么多连接的开销的方法是“缓存”连接。一种方法是用一个类替换您的函数:

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 类的实例并调用其 query 方法。收集 DB 实例后,连接将自动关闭。