python连接sql server数据库(pyodbc)

news/2024/11/25 10:59:28/

用python操作ms sql server,有好几种方法:

(1)利用pymssql (2)利用pyodbc

这里讲import pyodbc来操作sql server database。

pyodbc是Python包,使用ODBC驱动器来连接SQL Server数据库,其中pyodbc的基本类型是Connection,Cursor、Row

其中,Connection表示客户端和数据库的连接,并用于提交事务;

Cursor表示向数据库发送的查询请求;

Row表示获取的结果集。

首先查看自己电脑有没有安装sql server对应的odbc,在控制面板中可以查:

控制面板-->管理工具-->数据源(ODBC)

我电脑的版本是  ODBC Driver 11 for SQL Server 

不同电脑安装了不同的sql server版本,可能driver不同,有可能是12、13、19等等版本。

然后利用powershell下载安装pyodbc包,如图输入

pip install pyodbc

下载成功之后,输入看看有没有成功安装package

pip list

成功安装package之后,就可以开始编辑python代码了。

代码如下(两个文件DBHelp_SqlServer.py  和 testConn.py):

文件1(DBHelp_SqlServer.py

import pyodbcclass MSSQL:def __init__(self, IP, UserID, Pwd, db):self.host=IP;self.user=UserID;self.password=Pwd;self.dbname=db;def __getConnect(self):if not self.dbname:raise(NameError,"db name undefine error")else:connSTR="Driver={ODBC Driver 11 for SQL Server};SERVER=%s,1433;DATABASE=%s;UID=%s;PWD=%s" % (self.host, self.dbname, self.user, self.password)##example: Driver={ODBC Driver 11 for SQL Server};SERVER=127.0.0.1,1433;DATABASE=MyTestDB;UID=sa;PWD=Abc123self.conn = pyodbc.connect(connSTR);cu= self.conn.cursor();if not cu:raise(NameError,"db connect error");else:return cu;def ExecuteTableQuery(self,selectSql):cuu = self.__getConnect();selectRows = cuu.execute(selectSql);resList=selectRows.fetchall();self.conn.close();return resList;def ExecuteNonQuery(self,sql):cuu = self.__getConnect();cuu.execute(sql);self.conn.commit();self.conn.close();def PrintODBCDrivers(self):print(pyodbc.drivers() );

文件2(testConn.py

import DBHelp_SqlServerdb=DBHelp_SqlServer.MSSQL(IP="127.0.0.1", UserID="sa", Pwd="Abc123", db="MyTestDB");sqlinsert="insert into TeacherTable(TName,TClass) values('吕老师','三年级')" 
db.ExecuteNonQuery(sql=sqlinsert);sql1="select * from TeacherTable";
datatable = db.ExecuteTableQuery(selectSql=sql1);
print(datatable);

运行之后就能看到insert sql和select sql的结果了。

备注:如果使用pymssql,可能会出现中文乱码的问题,我搞不懂怎么解决。而使用pyodbc就没出现乱码。哪个简单用哪个。


http://www.ppmy.cn/news/22798.html

相关文章

云原生框架k8s基本操作

title: 云原生框架k8s基本操作 date: 2023-01-30 21:47:03 tags: [helm, k8s, kubernetes] categories: k8s 学习一下,本地测试如何使用helm进行k8s的包管理。 环境 macos 概念: minikube:用来快速搭建一个单机kubernetes集群的工具kind&…

洛谷 P1106 删数

删数问题 题目描述 键盘输入一个高精度的正整数 NNN(不超过 250250250 位),去掉其中任意 kkk 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 NNN 和 kkk,寻找一种方案使得剩下的数字组成的新数最小。 输…

JavaSE中级之集合四--Set接口

Set接口直接继承Collection接口List接口是不唯一且有序的Set相对于List接口是唯一且无序的,无序不等于随机HashSet实现类特点存入Integer类型的数据,当集合中有相同的数据时只会存相同的数据的第一个数据存入String数据的时候同Integer数据一样HashSet&l…

DFS BFS学习笔记

前言: 当前文章为学习笔记,消化大神的思想笔记,然后按照大神的思路梳理一遍 深度优先 (Depth first search, DFS); 深度优先搜索的步骤分为 1.递归下去 2.回溯上来。 顾名思义,深度优先,则是以深度为准则: …

Redis持久化策略(RDB/AOF)及选型

Redis持久化策略(RDB/AOF)及选型 1. Redis持久化策略 Redis持久化的意义:防止服务或系统宕机导致数据丢失。 Redis提供了两种持久化策略:RDB(Redis DataBase)、AOF(Append Only File&#xff0…

京东一面:20种异步,你知道几种? 含协程

背景说明: 异步,作为性能调优核心方式之一,经常被用于各种高并发场景。 很多场景多会使用到异步,比如: 场景1: 超高并发 批量 写 mysql 、批量写 elasticSearch 场景2: 超高并发 批量 IO 场景…

手把手带你玩转分散加载

(简单地说)分散加载的目的就是让MCU内核知道哪里存的是代码、哪里存的是数据,去哪个特定的地址找到下一步需要运行的函数,并且告诉编译器把每一个编译好的函数、数据放到具体的哪一个物理地址。 (专业地说&#xff09…

【开源WebGIS】07-Openlayers+Vue 测量功能-02

在上一节中,我们实现了基础的测量功能。但是实现的测量功能还有很多问题,还有很多东西可以细化,主要细化以下几个方面: 绘制的提示文字 绘制结果的显示 最终实现相对完整的测量功能,展示如下: 创建一个绘制提示的函…