Python多线程中使用MySQLdb进行数据库操作时,可以通过封装类来简化数据库连接和操作的管理。下面是一个简单的MySQLdb封装类的示例,该类支持多线程环境下的安全使用。
import MySQLdb
import threading
class MySQLDBWrapper:
def __init__(self, host, user, passwd, db, port=3306, charset='utf8mb4'):
self.host = host
self.user = user
self.passwd = passwd
self.db = db
self.port = port
self.charset = charset
self.lock = threading.Lock()
self.conn = None
def connect(self):
try:
self.conn = MySQLdb.connect(
host=self.host,
user=self.user,
passwd=self.passwd,
db=self.db,
port=self.port,
charset=self.charset
)
except MySQLdb.Error as e:
print(f"Error connecting to MySQL: {e}")
raise
def close(self):
if self.conn:
self.conn.close()
def execute(self, sql, params=None):
with self.lock:
try:
cursor = self.conn.cursor()
if params:
cursor.execute(sql, params)
else:
cursor.execute(sql)
self.conn.commit()
return cursor.fetchall()
except MySQLdb.Error as e:
print(f"Error executing SQL: {e}")
self.conn.rollback()
finally:
cursor.close()
# 使用示例
if __name__ == "__main__":
db_wrapper = MySQLDBWrapper(host='localhost', user='user', passwd='password', db='testdb')
db_wrapper.connect()
# 执行查询
results = db_wrapper.execute("SELECT * FROM test_table")
for row in results:
print(row)
db_wrapper.close()threading.Lock())确保在多线程环境下对数据库的操作是线程安全的。请注意,上述代码示例仅供参考,实际应用中可能需要根据具体需求进行调整和优化。
没有搜到相关的沙龙