最近遇到几个需求,需要从centos上通过python访问sql server服务器查询数据,本来倒也不是很复杂,通过pyodbc比较顺利地实现了,具体如下:
- 先直接通过yum安装unixODBC、unixODBC-devel和freetds (pyodbc需要)
- 然后源码编译安装pyodbc
- 配置/etc/odbcinst.ini,添加连接sql server的数据源信息 (路径按实际情况填写)
[SQL Server] Description = FreeTDS ODBC driver for MSSQL Driver = /usr/local/freetds/lib/libtdsodbc.so Setup = /usr/local/freetds/lib/libtdsS.so FileUsage = 1
配置完成后就可以直接访问sql server数据库进行查询了
#!/usr/bin/env python #-*- encoding: utf-8 -*- import pyodbc conn=pyodbc.connect('DRIVER={SQL Server};SERVER=xxx.xxx.xxx.xxx;port=1433;DATABASE=testdb;UID=user;PWD=password') cursor=conn.cursor() cursor.execute("select name from test") row=cursor.fetchone() print row[0]
然而,还没有高兴多久就发现一个大问题,数据库中存储的中文字符不能正常显示,全部变成了问号。这其实也很正常,因为sql server里面的字符编码不是通用的utf-8(所以说windows上的东西就是难搞啊)。虽然知道原因,但是要解决这个问题却也不是很容易,在对freetds的charset设置和pyodbc连接的charset设置进行各种调整尝试,返回结果也各种encode、decode之后,问号依然是顽强的问号。
在被问号折腾了好久快要放弃的时候,终于找到了解决办法。究其根本原因,还是Linux和window系统间的不同字符集问题,这实在是个难翻的墙啊。freetds会做字符集的默认转换,结果就是这个转换导致了中文变问号。解决方法:
- 首先,freetds必须源码安装,在编译时指定参数disable-libiconv,禁止自动转换:./configure --enable-msdblib --prefix=/usr/local/freetds --with-tdsver=8.0 --disable-libiconv
- 然后,连接数据库时需要指定tds_version参数,版本太低会有问题,我用的是8.0(访问sql server 2008 R2)
- 在获取返回结果时,由于sql server内部是gbk编码的,因此需要把结果从gbk进行解码,这样才能在utf8环境中正常显示。
conn=pyodbc.connect('DRIVER={SQL Server};SERVER=xxx.xxx.xxx.xxx;port=1433;DATABASE=testdb;UID=user;PWD=password;TDS_Version=8.0') cursor=conn.cursor() cursor.execute("select name from test") row=cursor.fetchone() print row[0].decode('gbk')
这样,终于成功地把中文正常显示出来了!不过还需要注意,如果中文字符在sql server中是使用unicode方式存储的(nvarchar nchar),那么还是会乱码,不过这个问题也很容易处理,在select的时候进行下转换即可,例如select convert(varchar,name) as name
相关推荐
标题中的“20120417_用Python访问SqlServer1”暗示了这是一个关于使用Python连接Microsoft SQL Server的教程,而描述进一步确认了这一点,讲述了在Windows和Linux环境下配置Python访问SQL Server的步骤。标签...
在UNIX和Linux操作系统环境下,访问Microsoft SQL Server数据库的需求日益增长,而FreeTDS库就是解决这一问题的关键。FreeTDS是一个开源项目,它允许Linux和类UNIX系统与Microsoft的SQL Server数据库进行通信,实现...
在Linux或OSX系统中,需要使用`chmod a+x script.py`命令给予脚本执行权限,然后通过`./script.py <arguments>`来运行。而在Windows系统中,则需要明确地使用`flask\Scripts\python script.py <arguments>`。 接...
本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL、Oracle、SQL Server数据库。 其中包括以下几个软件的安装及配置: unixODBC FreeTDS pyodbc cx_Oracle 欢迎转载...
在Linux环境中,与Windows系统不同,SQL Server数据库的直接访问通常需要通过ODBC(Open Database Connectivity)驱动程序来实现。本安装包包含了两个关键组件,它们是连接SQL Server的基石:freetds和unixODBC。 1...
SQL Server ODBC驱动是微软提供的,用于连接到SQL Server数据库的关键组件。它支持多种版本的SQL Server,包括Express、Standard、Enterprise等,并且可以在Windows操作系统上运行。通过这个驱动,开发者可以使用...
SQL Server 2019是Microsoft推出的一款关系型数据库管理系统,是SQL Server系列中的一个重要版本。它提供了强大的数据存储、处理和分析能力,广泛应用于企业级数据库应用开发和数据分析。在本安装包中,主要包含的是...
SQL Server驱动包是用于连接Microsoft SQL Server数据库的关键组件,它提供了必要的接口,使得应用程序能够与SQL Server进行数据交互。在本篇文章中,我们将深入探讨SQL Server驱动的不同类型、其工作原理以及如何...
**SQL Server ODBC驱动**是连接到Microsoft SQL Server数据库的关键组件,它允许应用程序通过开放数据库连接(ODBC)标准与SQL Server进行通信。ODBC是一种跨平台的数据访问接口,使得不同编程语言和操作系统上的...
"tencentcloud-sdk-python-sqlserver"这部分表明这是一个腾讯云提供的SDK,专门针对Python环境,用于操作SQL Server数据库。"3.0.335"则是这个版本号,表示这是该SDK的第3.0.335版,通常每个版本都会有性能优化、新...
模具管理系统是针对小型企业设计的一款应用,它利用Python编程语言,结合PyQt5图形用户界面库,以及SQL Server数据库技术,实现了一套高效、易用的模具管理解决方案。这款系统的特点在于其开源性质,所有代码均对...
SQL Server 2019是Microsoft推出的一款关系型数据库管理系统,具有强大的数据处理能力和高度的安全性。本中文帮助文档提供了全面的指引,涵盖了从安装、配置到管理和优化的各个环节。 在【新增功能】部分,SQL ...
【MSSQL 】SQLServer分布式集群Python自动故障转移脚本 #安装依赖 pip install pymssql #windows打包 pyinstaller -w -F mssqlScript.py ######or pyinstaller -F mssqlScript.py #windows运行 ./mssqlScript.exe ...
MySQL、Oracle和SQL Server是三款非常流行的数据库管理系统(DBMS),广泛应用于各种规模的企业和项目。本文将深入探讨这三大数据库系统及其驱动包的相关知识点。 首先,MySQL是一款开源、免费的关系型数据库管理...
它支持数据查询、数据更新、流程控制、异常处理等功能,是开发和管理SQL Server数据库的基础。 5. **备份与恢复**:SQL Server提供了多种备份类型,如完整备份、差异备份、日志备份等,以及相应的恢复模式。这些...
数据库课设 基于Python+PyQt+SQLServer的图书管理系统源码+详细说明+全部数据资料(高分项目).zip数据库课设 基于Python+PyQt+SQLServer的图书管理系统源码+详细说明+全部数据资料(高分项目).zip 【备注】 1、该...
SQL Server 2019是微软公司推出的数据库管理系统,它在SQL Server系列中扮演着重要的角色,特别是对于那些需要高效、可靠且经济实惠的数据存储和管理解决方案的企业而言。本篇文章将深入探讨SQL Server 2019的核心...
总之,虽然Django默认不支持SQL Server,但通过安装第三方模块以及适当配置,仍然可以实现Django项目与SQL Server数据库的集成。这不仅为Django开发者提供了更丰富的数据库选择,也为使用特定数据库产品的公司提供了...
同时,支持Microsoft Active Directory身份验证系统,使得在Linux上对SQL Server的访问变得更加安全。 **机器学习和AI支持** SQL Server 2017引入了对R和Python的支持,允许在数据库内部进行分析,无需提取和转换...