python 使用pymssql连接sq

发布时间:2019-08-25 09:32:48编辑:auto阅读(1482)

    Python连接SQL Server数据库 - pymssql使用基础  

    ----原文地址:http://www.cnblogs.com/baiyangcao/p/pymssql_basic.html


    下面是pymssql里参数使用说明,如下:

    1. pymssqlCnx类(用于连接Mssql数据库)

    pymssql.connect()来初始化连接类,它允许如下的参数。

    dsn:连接字符串,主要用于与之前版本的pymssql兼容
    user:用户名
    password:密码
    trusted:布尔值,指定是否使用windows身份认证登陆
    host :主机名
    database:数据库
    timeout:查询超时
    login_timeout:登陆超时
    charset:数据库的字符集
    as_dict:布尔值,指定返回值是字典还是元组
    max_conn:最大连接数


    2. Method

    autocommit(status)

    布尔值,指示是否自动提交事务,默认的状态是关闭的,如果打开,你必须调用commit()方法来提交事务。


    close()

    关闭连接


    cursor()
    返回游标对象,用于查询和返回数据
    commit()

    提交事务。


    rollback()
    回滚事务

    pymssqlCursor类
    用于从数据库查询和返回数据

    rowcount

    返回最后操作影响的行数。


    connection

    返回创建游标的连接对象


    lastrowid
    返回插入的最后一行

    rownumber
    返回当前数据集中的游标(通过索引)


    3. 游标方法

    close()
    关闭游标

    execute(operation)

    执行操作


    execute(operation, params)

    执行操作,可以提供参数进行相应操作


    executemany(operation, params_seq)

    执行操作,Params_seq为元组

    fetchone()
    在结果中读取下一行

    fetchmany(size=None)
    在结果中读取指定数目的行


    fetchall()
    读取所有行

    nextset()
    游标跳转到下一个数据集



    #coding=utf-8 
    #!/usr/bin/env python
    #-------------------------------------------------------------------------------
    # Name: pymssqlTest.py
    # Purpose: 测试 pymssql库,该库到这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
    #
    # Author: scott
    #
    # Created: 04/02/2012
    #-------------------------------------------------------------------------------
    
    import pymssql
    
    
    class MSSQL:
        """
        对pymssql的简单封装
        pymssql库,该库到这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
        使用该库时,需要在Sql Server Configuration Manager里面将TCP/IP协议开启
    
        用法:
    
        """
    
        def __init__(self,host,user,pwd,db):
            self.host = host
            self.user = user
            self.pwd = pwd
            self.db = db
    
        def __GetConnect(self):
            """
            得到连接信息
            返回: conn.cursor()
            """
            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 ExecQuery(self,sql):
            """
            执行查询语句
            返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
    
            调用示例:
                    ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
                    resList = ms.ExecQuery("SELECT id,NickName FROM WeiBoUser")
                    for (id,NickName) in resList:
                        print str(id),NickName
            """
            cur = self.__GetConnect()
            cur.execute(sql)
            resList = cur.fetchall()
    
            #查询完毕后必须关闭连接
            self.conn.close()
            return resList
    
        def ExecNonQuery(self,sql):
            """
            执行非查询语句
    
            调用示例:
                cur = self.__GetConnect()
                cur.execute(sql)
                self.conn.commit()
                self.conn.close()
            """
            cur = self.__GetConnect()
            cur.execute(sql)
            self.conn.commit()
            self.conn.close()
    
    def main():
    ## ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
    ## #返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
    ## ms.ExecNonQuery("insert into WeiBoUser values('2','3')")
    
        ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
        resList = ms.ExecQuery("SELECT id,weibocontent FROM WeiBo")
        for (id,weibocontent) in resList:
            print str(weibocontent).decode("utf8")
    
    if __name__ == '__main__':
        main()


    注意事项:

        使用pymssql进行中文操作时候可能会出现中文乱码,我解决的方案是:

    • 文件头加上 #coding=utf8

    • sql语句中有中文的时候进行encode

         insertSql = "insert into WeiBo([UserId],[WeiBoContent],[PublishDate]) values(1,'测试','2012/2/1')".encode("utf8")

    •  连接的时候加入charset设置信息

          pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")


关键字