python进行SQLServer查询中文乱码

class SqlServer(object):
    """  Sql Server db operator.  """

    def __init__(self, username, password, host, database):
        self._conn = pymssql.connect(server=host, user=username, password=password, database=database, charset='utf8',
                                     as_dict=True) # 结果封装成字典,方便获取
        self.cursor = self._conn.cursor()

    # query methods
    def query_all(self, sql) -> list:
        self.cursor.execute(sql)
        rows = self.cursor.fetchall()

        result = []
        for row in rows:
            result.append({key: self._transcoding(value) for key, value in row.items()})
        return result

    # 转码一下=========================================================================
    def _transcoding(self, v):
        if not v:
            return v
        if not isinstance(v, str):
            return v
        try:
            return v.encode("latin-1", errors="ignore").decode("gbk", errors="ignore")
        except Exception:
            return v

    def query_one(self, sql):
        self.cursor.execute(sql)
        return self.cursor.fetchone()

    def query_by(self, sql, name_params={}):
        if len(name_params) > 0:
            self.cursor.execute(sql, name_params)
        else:
            self.cursor.execute(sql)

        rows = self.cursor.fetchall()

        result = []
        for row in rows:
            result.append({key: self._transcoding(value) for key, value in row.items()})
        return result

    def insert_batch(self, sql, name_params=[]):
        """batch insert much rows one time,use location parameter"""
        self.cursor.prepare(sql)
        self.cursor.executemany(None, name_params)
        self.commit()

    def commit(self):
        self._conn.commit()

    def __del__(self):
        if hasattr(self, 'cursor'):
            self.cursor.close()

        if hasattr(self, '_conn'):
            self._conn.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值