import pymysql
class MysqlC:
def __init__(self, host, user, password, database):
self.con = None
self.arguments = {
"host": host,
"user": user,
"password": password,
"database": database,
"charset": 'utf8'
}
def post(self, sql):
with self:
try:
data = self.cursor.execute(sql)
self.con.commit()
return data
except Exception as e:
self.con.rollback()
return e
def get(self, sql, one=None):
with self:
try:
self.cursor.execute(sql)
if one:
return self.cursor.fetchone()
else:
return self.cursor.fetchall()
except Exception as e:
return e
def __enter__(self):
if self.con is None:
try:
self.con = pymysql.connect(**self.arguments)
self.cursor = self.con.cursor(pymysql.cursors.DictCursor)
except Exception:
raise "数据库连接失败!"
def __exit__(self, exc_type, exc_val, exc_tb):
self.cursor.close()
self.con.close()
self.con = None
if __name__ == '__main__':
mysql = MysqlC('123', 'root', 'z21', 'white_ip')
w = mysql.get("select * from user")
print(w)
#基于mysql连接池
import pymysql
from dbutils.pooled_db import PooledDB
class MysqlC:
def __init__(self, host, user, password, db):
self.pool = PooledDB(
creator=pymysql, # 使用链接数据库的模块
maxconnections=200, # 连接池允许的最大连接数,0和None表示不限制连接数
mincached=10, # 初始化时,链接池中至少创建的链接,0表示不创建
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
ping=0,
host=host,
port=3306,
user=user,
password=password,
database=db,
charset='utf8'
)
def post(self, sql):
with self:
try:
data = self.cursor.execute(sql)
self.con.commit()
return data
except Exception as e:
self.con.rollback()
return e
def get(self, sql, one=None):
with self:
try:
self.cursor.execute(sql)
if one:
return self.cursor.fetchone()
else:
return self.cursor.fetchall()
except Exception as e:
return e
def __enter__(self):
self.con = self.pool.connection()
self.cursor = self.con.cursor(pymysql.cursors.DictCursor)
def __exit__(self, exc_type, exc_val, exc_tb):
self.cursor.close()
self.con.close()
if __name__ == '__main__':
mysql = MysqlC('12193', 'root', 'zb51', 'white_ip')
w = mysql.get("select * from user")
print(w)
```