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'
)。
- 有什么方法可以避免这么多连接?
- 一开始我应该避免这么多连接吗?
- 我可以使用这么多连接和查询使服务器崩溃吗?
我先回答你最后一个问题。您的函数正在获取一个连接,但它在返回之前关闭了它。所以,我看不出为什么除非你是多线程或多处理,否则你会一次使用多个连接并且你不应该让服务器崩溃。
避免创建和关闭这么多连接的开销的方法是 "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实例被抓取时,连接会自动关闭
我已经编写了一个使用 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'
)。
- 有什么方法可以避免这么多连接?
- 一开始我应该避免这么多连接吗?
- 我可以使用这么多连接和查询使服务器崩溃吗?
我先回答你最后一个问题。您的函数正在获取一个连接,但它在返回之前关闭了它。所以,我看不出为什么除非你是多线程或多处理,否则你会一次使用多个连接并且你不应该让服务器崩溃。
避免创建和关闭这么多连接的开销的方法是 "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实例被抓取时,连接会自动关闭