配置 ubuntu odbc 和 pypyodbc

作者: , 共 2111 字 , 共阅读 0

1、安装分为三步

一定要先座这一几步,否则直接用pypyodbc会爆下面错误:

pypyodbc.DatabaseError: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found")

1.1、第一步、安装ODBCFreeTDS模块

sudo apt-get install tdsodbc unixodbc

1.2、第二步、修改/etc/odbcinst.ini

[FreeTDS] 
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

1.3、第三步、修改/etc/freetds/freetds.conf

[Global] 
TDS_Version = 8.0 
client charset = UTF-8

2、pypyodbc 的安装和使用

2.1、pypyodbc 安装

pip install pypyodbc

2.2、pypyodbc 示例代码

import pypyodbc 
conn = 'Driver=FreeTDS;Server=192.168.1.2;port=1433;uid=sa;pwd=pwd1;database=db_name'
conn = pypyodbc.connect(conn) 
cursor = conn.cursor()

sql = "select * from a_table"
results = cursor.execute(sql.encode())
print(results)

2.3、pypyodbc 的中文乱码问题

一个烦心事情是 pypyodbc 查询到的中文结果都显示为问号乱码,下面的代码可以解决这个问题。但会导致无法正常获取查询结果的字段名称(curser.description结果异常)。由于修改了 sys 全局设置,目前不清楚是否还有其它副作用。

import sys
import importlib
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
importlib.reload(sys)

pyodbc.connect(connStr, unicode_results=True, charset="utf8")

3、不需要 ODBC 了!

Python 的工具链继续完善,现在不需要 ODBC ,直接用各个数据库的工具包即可。它们的用法大同小异。

3.1、pymysql for MYSQL

import pymysql 

conn = pymysql.connect(host="1.1.1.1", 
                       port=1212, 
                       user="abc", 
                       password="bbb",
                       db="XXX")
cursor = conn.cursor()
cursor.execute(sql.encode("utf-8"))
columns = [x[0] for x in cursor.description]
data = list(cursor.fetchall())                     

3.2、pymssql for MSSQL

import pymssql 

conn = pymysql.connect("1.1.1.1:1213", 'username', 'password', 'dbname')
cursor = conn.cursor()
cursor.execute(sql.encode("utf-8"))
columns = [x[0] for x in cursor.description]
data = list(cursor)

3.3、cx_Oracle for ORACLE

import cx_Oracle
conn = cx_Oracle.connect("user/password@1.1.1.1:2123/dbname")
cursor = conn.cursor()
results = cursor.execute(sql.encode("utf-8"))
columns = [x[0] for x in cursor.description]
data = list(results)

Q. E. D.

类似文章:
Excel、Matlab 在与数据库交互数据时,通常需要事先配置好 ODBC 数据源,这导致一个文件换到另一台机器还需要重新配置 ODBC。手工配置太麻烦,从国外一个网站看到一种解决方案:
Matlab 的 database 工具箱只支持 ODBC 数据库连接,在使用之前需要先设置 ODBC 数据源。之前在 Excel 里用的是 ADODB ,使用 ADODB 的好处是无需设置 ODBC 源,似乎效率也要高一些(但我一直没弄懂 ADODB 是什么东西,所以效率这东西我也说不清)。
更新一下之前写的Excel 的数据库类,将其改成函数的形式,调用更简单(省却了生成类实例的步骤)。现在这个代码在工作中用了一年多,已经比较健壮。若有问题,请留言指出或与我联系。
2014-03-25 更新:我已经将该类修改成函数形式,并增加新功能,参见更新 Excel 的数据库查询函数库
IT » Linux系统配置
查看当前 DNS :
相似度: 0.087
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0
编程 » bug, Matlab
Matlab 内置的 runstoredprocedure 函数,用来运行同时有输入和输出参数的存储过程:
编程 » Excel
在编辑 Excel 文件时经常遇到的一个问题是,我这边用得好好地,换台机器就变了个样,或者根本用不了。下面是我在日常工作中总结的一些避免这些情况的小技巧。
编程 » Linux, Vim, 字符编码
由于 UNICODE 的优势,目前推荐都用 UTF-8 进行编码。
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0
编程 » GIT
git经常出现类似于HEAD detached at origin/development的错误提示。这是因为当前的 HEAD 没有位于任何一个分支上的缘故。