文件路径:项目目录/common/mssql_handler.py
import pymssql
from common.config_handler import conf
class OperateMSsql(object):
def __init__(self, dbname):
# 数据库初始化连接
if dbname == "Test_CityOne":
self.db_conf = dict(conf.items('mssqlconf_cityone'))
elif dbname == "Test_rikaze":
self.db_conf = dict(conf.items('mssqlconf_rikaze'))
else:
print("error,dbname not exist")
self.conn = pymssql.connect(
host=self.db_conf["host"],
user=self.db_conf["user"],
password=self.db_conf["password"],
database=self.db_conf["db_name"],
charset="utf8",
autocommit=False,
# 库连接中,进行数据库更新之后在进行查询之前一定要进行commit操作(除查询外,增加、删除、修改操作,均需要commit才能生效),如果没有指定autocommit属性为True的话就需要调用commit()方法
)
# 创建游标操作数据库
self.cur = self.conn.cursor(as_dict=True) # as_dict参数使游标返回字典变量,字典中的键为数据表的列名
def select_first_data(self, sql):
"""
查询第一条数据
"""
try:
# 使用execute方法执行SQL语句
self.cur.execute(sql)
except Exception as e:
print("执行sql异常:%s" % e)
else:
# 获取查询到的第一条数据
# fetchone:不管查询结果是多条数据还是单条数据,使用fetchone得到的始终是一个元组。如果需要取元组中的数值,需要使用cur.fetchone[0]
# fetchall:不管查询结果是多条数据还是单条数据,使用fetchall得到的始终是一个由元组组成的列表。如果需要取元组中的数值,需要使用cur.fetchone[0][0]
first_data = self.cur.fetchone()
return first_data
def select_all_data(self, sql):
"""
查询结果集
"""
try:
# 使用execute方法执行SQL语句
self.cur.execute(sql)
except Exception as e:
print("执行sql异常:%s" % e)
else:
# 使用 fetchall() 方法获取数据
first_data = self.cur.fetchall()
return first_data
def get_count(self, sql):
"""
获取数据条数
"""
self.conn.commit()
return self.cur.execute(sql)
def del_data(self, sql):
"""
删除数据
"""
res = {}
try:
# 执行SQL语句
result = self.cur.execute(sql)
# print(result)
if result != 0:
# 提交修改
self.conn.commit()
res = {'删除成功'}
else:
res = {'没有要删除的数据'}
except:
# 发生错误时回滚
self.conn.rollback()
res = {'删除失败'}
return res
def update_data(self, sql):
"""
修改数据
"""
try:
self.cur.execute(sql)
self.conn.commit()
res = {'更新成功'}
except Exception as e:
self.conn.rollback()
res = {'更新删除'}
return res
def insert_data(self, sql, data):
"""
新增数据
"""
try:
self.cur.execute(sql, data)
self.conn.commit()
res = {data, '新增成功'}
except Exception as e:
res = {'新增失败', e}
return res
def conn_close(self):
# 关闭数据库连接
self.cur.close()
self.conn.close()