为了封装这个数据库操作为一个通用方法,我们可以创建一个函数,该函数接受数据库连接参数(如主机名、用户名、密码、数据库名)、SQL语句以及必要的参数(用于参数化查询)。下面是一个简单的封装示例:
python
import pymysql
def execute_query(host, user, password, db, query, params=None, charset='utf8mb4'):
"""
执行SQL查询并返回结果。
:param host: 数据库主机名
:param user: 数据库用户名
:param password: 数据库密码
:param db: 数据库名
:param query: SQL查询语句
:param params: 用于参数化查询的参数元组,默认为None
:param charset: 字符集,默认为'utf8mb4'
:return: 查询结果
"""
try:
# 建立数据库连接
connection = pymysql.connect(host=host, user=user, password=password, db=db, charset=charset)
with connection.cursor() as cursor:
# 执行SQL语句
cursor.execute(query, params)
# 获取查询结果
result = cursor.fetchall()
# 返回查询结果
return result
except pymysql.MySQLError as e:
print(f"数据库错误: {e}")
return None
finally:
# 关闭数据库连接
if connection:
connection.close()
# 使用示例
if __name__ == "__main__":
host = 'localhost'
user = 'user'
password = 'passwd'
db = 'db'
query = "SELECT `id`, `name` FROM `users` WHERE `age` > %s"
params = (18,)
result = execute_query(host, user, password, db, query, params)
if result:
for row in result:
print(row)
else:
print("没有查询到结果")
这个函数execute_query
接受必要的数据库连接信息和SQL查询语句,以及可选的参数元组用于参数化查询。它执行查询并返回结果。如果发生数据库错误(如连接问题或SQL语句错误),它会打印错误消息并返回None
。最后,它确保数据库连接在使用后被正确关闭。
请注意,在实际应用中,您可能还需要处理其他类型的异常,比如网络问题导致的连接中断等。此外,对于需要提交更改的SQL语句(如INSERT、UPDATE、DELETE),您可能需要在with
块内调用connection.commit()
来提交更改。但在这个例子中,我们只处理查询操作,因此不需要提交更改。