分享一个python数据库操作pymysql的简单封装
import pymysql
class MyDatabase(object):
def __init__(self, host, port, user, password, database, charset='utf8'):
self.host = host
self.port = port
self.user = user
self.password = password
self.database = database
self.charset = charset
self._conn = None
self._cursor = None
def connect(self):
self._conn = pymysql.connect(
host=self.host,
port=self.port,
user=self.user,
password=self.password,
database=self.database,
charset=self.charset)
self._cursor = self._conn.cursor()
def execute(self, sql, params=None, commit=True):
if not self._cursor:
self.connect()
try:
self._cursor.execute(sql, params)
if commit:
self._conn.commit()
except:
self._conn.rollback()
raise
def query_all(self, sql, params=None):
if not self._cursor:
self.connect()
result = None
try:
self._cursor.execute(sql, params)
result = self._cursor.fetchall()
except:
raise
return result
def query_one(self, sql, params=None):
if not self._cursor:
self.connect()
result = None
try:
self._cursor.execute(sql, params)
result = self._cursor.fetchone()
except:
raise
return result
def close(self):
if self._cursor:
self._cursor.close()
if self._conn:
self._conn.close()
在这个封装类中,我们使用了Pymysql库连接MySQL数据库。我们创建了一个MySQL类,该类的初始化方法init()接受MySQL连接的参数,包括host、port、user、password、database和charset。
实现了以下几个方法:
connect():连接到MySQL数据库。
execute():执行SQL查询或更新,支持传入参数,例如常规的查询或插入等操作。
query_all():查询多行数据,并将其一次性返回一个元组。
query_one():只查询一行数据并将这一行数据以元组的形式返回。
close():关闭连接。
我们可以通过创建MySQL类的实例,并使用execute()或query_all()等方法来执行SQL查询或更新。例如,下面的示例代码检查了一个用户是否存在:
mysql = MySQL('localhost', 3306, 'root', 'password', 'database')
sql = 'SELECT * FROM users WHERE username = %s'
params = ('john',)
result = mysql.query_all(sql, params)
if len(result) > 0:
print('用户已存在')
else:
print('可以创建用户')
mysql.close()
需要注意的是,在执行多条查询操作时,建议使用完query_all()方法后,使用close()方法关闭连接以释放资源。