1、安装分为三步
一定要先座这一几步,否则直接用pypyodbc
会爆下面错误:
pypyodbc.DatabaseError: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found")
1.1、第一步、安装ODBC
、FreeTDS
模块
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.