• python接口自动化测试二十八:连接SQL sever操作



    1、中文乱码问题:
      (1)、文件头加上# -*- coding:utf-8 -*- 或者 #coding=utf8
      (2)、pymssql.connect连接串中charset是要跟你数据库的编码一样,如果是数据库是gb2312 ,则写charset='gb2312'。
      (3)、读取数据时需要decode('utf-8'),写入数据时需要encode('utf-8'),这样就可以避免中文乱码或报错问题。

    2、需要安装pymssql包(连接mysql安装pymysql)
      pip install pymssql

    3、代码:

    # coding:utf-8

    import pymssql

    class MSSQL:
    def __init__(self,host,user,pwd,db):
    self.host = host
    self.user = user
    self.pwd = pwd
    self.db = db

    def __GetConnect(self):
    if not self.db:
    raise(NameError, "没有设置数据库信息")
    self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
    cur = self.conn.cursor()
    if not cur:
    raise(NameError, "连接数据库失败")
    else:
    return cur

    def Selsql(self,sql):
    cur = self.__GetConnect()
    cur.execute(sql)
    resList = cur.fetchall()

    #查询完毕后必须关闭连接
    self.conn.close()
    return resList

    def Exesql(self,sql):
    cur = self.__GetConnect()
    try:
    # 执行sql语句
    cur.execute(sql)
    # 提交到数据库
    self.conn.commit()
    except:
    # 发生错误时回滚
    conn.rollback()
    # 关闭数据库连接
    self.conn.close()

    if __name__=='__main__':

    ms = MSSQL(host="192.168.1.1",user="sa",pwd="sa",db="testdb")
    reslist = ms.Selsql("select * from webuser")
    for i in reslist:
    print(i)

    newsql="update webuser set name='%s' where id=1"%u'测试'
    print(newsql)
    ms.Exesql(newsql.encode('utf-8'))


    4、数据库操作常用函数:

    commit() 提交
    rollback() 回滚

    cursor用来执行命令的方法:
    callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
    execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
    executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
    nextset(self):移动到下一个结果集

    cursor用来接收返回值的方法:
    fetchall(self):接收全部的返回结果行.
    fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
    fetchone(self):返回一条结果行.
    scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.

    更新操作语句中列表的运用:
      value=[1,'aaa']
      cur.execute('insert into test values(%s,%s)',value)

      values=[]
      for i in range(20):
      values.append((i,'aaa'+str(i)))
      cur.executemany('insert into test values(%s,%s)',values)

  • 相关阅读:
    hive mind ioc retired already
    存储系统介绍
    最后找到有源码的ORM
    DEDE在图集列表中调出图集的所有图片[首页也适用]
    客户端接收发邮件时,出现“无法连接到服务器
    4种常用扒站工具(webzip、ha_TeleportPro、Offline Explorer、wget)
    CSS3 backgroundsize图片自适应
    webzip怎么用 如何用webzip下载整个网站?
    ArrayList Vector LinkedList 区别与用法
    wish list: 考虑使用nutch给自己的博客做一个全文检索
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/9619970.html
Copyright © 2020-2023  润新知