Python连接SQL Server数据库 - pymssql使用基础:https://www.cnblogs.com/baiyangcao/p/pymssql_basic.html

廖雪峰官网 之 Python 访问数据库(SQLLite / MySQL / SQLAlchemy)

pymssql examples :http://pymssql.org/en/stable/pymssql_examples.html

python-整理--连接MSSQL:https://www.cnblogs.com/mirrortom/p/5218865.html

Python 操作SQLServer 需要使用 pymssql 模块,使用pip install pymssql安装。然后import该包即可。安装成功后,使用如下语句和 MSSql 数据库交互。

( pymssql 需要安装 Cython:https://pypi.org/project/Cython   和   freetds:linux下利用freetds 访问sqlserver数据库  )

下载 FreeTDS,地址:www.freetds.org
下载后解压: tar -zxvf XXX.tar.gz
然后执行
        ./configure --prefix=/usr/local/freetds --with-tdsver=7.1 --enable-msdblib
        make
        make install

示例代码(游标使用注意事项):

import pymssql# 可以进入 connect 方法里面查看更多参数
conn=pymssql.connect(server='192.168.0.110', port=9526, user='sa', password='pwd', database='test')# 游标使用注意事项
# 一个连接一次只能有一个游标的查询处于活跃状态,如下:
cursor_1 = conn.cursor()
cursor_1.execute('SELECT * FROM persons')cursor_2 = conn.cursor()
cursor_2.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')print( "all persons" )
print( cursor_1.fetchall() )  # 显示出的是cursor_2游标查询出来的结果print( "John Doe" )
print( cursor_2.fetchall() )  # 不会有任何结果

为了避免上述的问题可以使用以下两种方式:
    1. 创建多个连接来保证多个查询可以并行执行在不同连接的游标上
    2. 使用fetchall方法获取到游标查询结果之后再执行下一个查询, 
        示例如下:
            c1.execute('SELECT ...')
            c1_list = c1.fetchall()
            
            c2.execute('SELECT ...')
            c2_list = c2.fetchall()

游标返回字典变量
    上述例子中游标获取的查询结果的每一行为元组类型,
    可以通过在创建游标时指定as_dict参数来使游标返回字典变量,

字典中的键为数据表的列名

import pymssql# 可以进入 connect 方法里面查看更多参数
conn = pymssql.connect(server, user, password, database)  # 可以在连接时指定参数 as_dict=True
cursor = conn.cursor(as_dict=True)                        # 也可以在创建游标时指定参数 as_dict=Truecursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
for row in cursor:print("ID=%d, Name=%s" % (row['id'], row['name']))
cursor.close()
conn.close()

使用with语句(上下文管理器)

可以通过使用with语句来省去显示的调用close方法关闭连接和游标

import pymssqlwith pymssql.connect(server, user, password, database) as conn:with conn.cursor(as_dict=True) as cursor:cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')for row in cursor:print("ID=%d, Name=%s" % (row['id'], row['name']))

简单使用示例:

import pymssqlconn = pymssql.connect(server, user, password, database)
cur=conn.cursor()
cur.execute('select top 5 * from [dbo].[Dim_Area]')# 如果 update/delete/insert 记得要 conn.commit() ,否则数据库事务无法提交
# 如果没有指定autocommit属性为True的话就需要调用commit()方法
# conn.commit()
print (cur.fetchall())
cur.close()cursor = conn.cursor()
cursor.executemany("INSERT INTO persons VALUES (%d, %s, %s)",[(1, 'John Smith', 'John Doe'),(2, 'Jane Doe', 'Joe Dog'),(3, 'Mike T.', 'Sarah H.')])
# 如果没有指定autocommit属性为True的话就需要调用commit()方法
conn.commit()# 查询操作
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
row = cursor.fetchone()
while row:print("ID=%d, Name=%s" % (row[0], row[1]))row = cursor.fetchone()# 也可以使用for循环来迭代查询结果
# for row in cursor:
#     print("ID=%d, Name=%s" % (row[0], row[1]))# 关闭连接
conn.close()

示例代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-import pymssqldb_host = '192.168.0.5'
db_port = '9526'
db_user = 'test'
db_pwd = 'test'
db_name = 'TestDB'
tb_name = 'TestTB'class SqlServerOperate(object):def __init__(self, server, port, user, password, db_name):self.server = serverself.port = portself.user = userself.password = passwordself.db_name = db_namepassdef __del__(self):# 其他地方不关闭连接,可以在这个地方统一关闭# self.conn.close()passdef __get_connect(self):self.conn = pymssql.connect(server=self.server,port=self.port,user=self.user,password=self.password,database=self.db_name,as_dict=True,charset="utf8")cur = self.conn.cursor()if not cur:raise (NameError, "连接数据库失败")else:return curdef exec_query(self, sql):cur = self.__get_connect()cur.execute(sql)result_list = list(cur.fetchall())self.conn.close()  # 查询完毕后必须关闭连接# 使用with语句(上下文管理器)来省去显式的调用close方法关闭连接和游标print('****************使用 with 语句******************')with self.__get_connect() as cur:cur.execute(sql)val = list(cur.fetchall())   # 把游标执行后的结果转换成 listprint(val)return result_listdef exec_non_query(self, sql):cur = self.__get_connect()cur.execute(sql)self.conn.commit()self.conn.close()  # 完毕后必须关闭连接def test():ms = SqlServerOperate(db_host, db_port, db_user, db_pwd, db_name)sql_string = "select * from SpiderItem where ResourceType = 20"temp_result_list = ms.exec_query(sql_string)for i in temp_result_list:print(i)passif __name__ == "__main__":test()pass

改进版:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author      :
# @File        : mongodboperate.py
# @Software    : PyCharm
# @description :import pymssqldb_host = '192.168.0.5'
db_port = '9526'
db_user = 'test'
db_pwd = 'test'
db_name = 'TestDB'
tb_name = 'TestTB'class SqlServerOperate(object):def __init__(self, server, port, user, password, db_name, as_dict=True):self.server = serverself.port = portself.user = userself.password = passwordself.db_name = db_nameself.conn = self.get_connect(as_dict=as_dict)passdef __del__(self):self.conn.close()def get_connect(self, as_dict=True):conn = pymssql.connect(server=self.server,port=self.port,user=self.user,password=self.password,database=self.db_name,as_dict=as_dict,charset="utf8")return conndef exec_query(self, sql):cur = self.conn.cursor()cur.execute(sql)result_list = list(cur.fetchall())cur.close()# 使用with语句(上下文管理器)来省去显式的调用close方法关闭连接和游标# print('****************使用 with 语句******************')# with self.get_connect() as cur:#     cur.execute(sql)#     result_list = list(cur.fetchall())   # 把游标执行后的结果转换成 list#     # print(result_list)return result_listdef exec_non_query(self, sql, params=None):cur = self.conn.cursor()# cur.execute(sql, params=params)cur.execute(sql, params=params)self.conn.commit()cur.close()def exec_mutil_sql(self, sql, data_list):"""执行一次 sql, 批量插入多条数据:param sql: 参数用 %s 代替 : insert into table_name(col1, col2, col3) values(%s, %s, %s):param data_list:  list类型, list中每个元素都是元组:return:"""cur = self.conn.cursor()cur.executemany(sql, data_list)self.conn.commit()cur.close()def test():ms = SqlServerOperate(db_host, db_port, db_user, db_pwd, db_name)sql_string = "select * from SpiderItem where ResourceType = 20"temp_result_list = ms.exec_query(sql_string)for i in temp_result_list:print(i)passif __name__ == "__main__":test()pass

Python操作MSSQL相关推荐

  1. 使用Python操作MSSQL数据库.

    有时想更新或迁移部分SqlServer数据,用SQL只会整几句select,高级点的连个游标都玩不转有木有?拿起VS写个小程序不停的改又编译很烦,有木有? 想用脚本写了有木有? 本文介绍使用pytho ...

  2. Python操作SQLServer

    安装开发环境 要进行SQLServer的开发,首先需要在本机上安装SQLServer,建立本机开发环境.可以从微软官网上下载类似cn_sql_server_2012_enterprise_editio ...

  3. Linux 下用 Python 连接 MSSql Server 2008

    Linux 下用 Python 连接 MSSql Server 2008 赖勇浩(http://blog.csdn.net/lanphaday) Keywords:Linux.python.pyodb ...

  4. python操作word文档(python-docx)

    python操作word文档(python-docx) 1. 效果图 1.1 python-docx文档标题段落(等级.加粗.斜体.居中)效果图 1.2 python-docx字体(加粗.斜体.居中. ...

  5. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  6. Python 操作 MongoDB 数据库!

    作者 |黄伟呢 来源 |数据分析与统计学之美 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 先来看看MySQL与MongoDB 概念区别 ...

  7. python操作yaml的方法详解

    这篇文章主要为大家介绍了python操作yaml的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助 一.参考链接 https://pyyaml.org/wiki/PyYAM ...

  8. python连接excel存放数据_有了这篇python操作Excel学习笔记,以后储存数据 办公很轻松!...

    最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处理.但是做着做着发现重复的劳动其实并没有多大的意义,于是就想着写个小工具帮着处理.以前正好在一本书上看到 ...

  9. job for nginx.service failed_用Python操作Kubernetes的Job

    关于Kubernetes的Python SDK,几乎只有官方项目的examples.关于Job的基本增删改查操作,可以参考job_crud.py.但是,这只是基本用法,缺乏一些实用细节. 本文给出Py ...

最新文章

  1. 用SQL命令查看Mysql数据库大小
  2. 如果没有StyleGAN2,真以为初代就是巅峰了:英伟达人脸生成器高能进化,弥补重大缺陷...
  3. 485不用双绞线可以吗_加装迎宾踏板可以吗?检车时用不用拆啊?
  4. 最常出现的字符串 Most Common Word
  5. Spring JPA
  6. 转:用ASP.NET创建网络相册
  7. mysql lock_MySQL-锁总结
  8. 盘点2021AI Conference Deadlines及论文写作突击要点
  9. Java-集合第二篇Set集合
  10. 一键切换网卡ip v1.0
  11. 如何在工具类中注入Service
  12. NPN与PNP三极管
  13. 苹果计算机如何显示错误,Mac闪烁问号——如何修复苹果电脑错误提示-万兴恢复专家...
  14. C++的64位整数[转]+gyy整理
  15. HTB Devel[Hack The Box HTB靶场]writeup系列3
  16. csr867x入门之spp使用(七)
  17. 明明努力了却学不好Java_为什么我这么努力,还是得不到自己想要的结果???...
  18. c语言CFile的使用方法,mfc文件操作CFile类之创建文件的方法
  19. GMap.net在winform中调用高德地图
  20. 看雪CTF2020 KCTF 秋季赛 签到题

热门文章

  1. 评测通知 | 2022年全国知识图谱与语义计算大会评测任务发布
  2. 论文浅尝 | 采用成对编码的图卷积网络用于知识图谱补全
  3. 中文任务型对话系统中的领域分类
  4. SpringBoot:如何处理SprintBoot提示Whitelabel Error Page以及了解原因?
  5. SpringMVC详细执行流程与组件说明
  6. 20190808面试记录
  7. Docker 是一个开源的应用容器引擎
  8. ThinkPHP5模型操作中的自动时间戳总结
  9. Delphi中动态调用DLL的方法
  10. IIS解决 上传文件大小限制