linux系统下使用Python3 + freetds + unixODBC连接sybase
镜像
# 拉取镜像
$:docker pull datagrip/sybase
# 启动容器
$:docker run -it -p 5000:5000 --name=sybase datagrip/sybase
# 进入容器
$:docker exec -it sybase /bin/bash
# 重置sa用户密码(在容器内执行)
$:source /opt/sybase/SYBASE.sh
$:vi $SYBASE/$SYBASE_ASE/install/RUN_MYSYBASE # 在末尾加 -pas
# 停止原数据库服务
$:kill -9 [自己数据库服务的PID]
# 重启数据库服务
$:$SYBASE/$SYBASE_ASE/bin/startserver -f $SYBASE/$SYBASE_ASE/install/RUN_MYSYBASE
#在启动信息中查找关键字 "New SSO password for sa:**********"
# 登陆数据库修改密码
$:isql -S MYSYBASE -U sa -P **********
1> sp_password 'aikgyscnqoktb1', 'aley1234', 'sa'
2> go
1>shutdown with nowait
2>go
$:vi $SYBASE/$SYBASE_ASE/install/RUN_MYSYBASE # 删除末尾的 -pas
# 启动数据库
$:$SYBASE/$SYBASE_ASE/bin/startserver -f $SYBASE/$SYBASE_ASE/install/RUN_MYSYBASE
# 使用新的密码就可以登陆了
$:isql -S MYSYBASE -U sa -P aley1234
下载FreeTDS
wget -c http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
安装
$:tar zxvf freetds-stable.tgz
$:cd freetds-0.91/
$:./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/ --with-tdsver=5.0
$:make && make install
配置
$:vim /usr/local/freetds/etc/freetds.conf
#添加如下内容:
[MYSYBASE]
host = IP 地址
port = 端口号
tds version = 5.0
client charset = UTF-8
#[]内填写自己需要连接的实例名,host和port填写自己服务的ip和端口
测试连接
$:/usr/local/freetds/bin/tsql -S MYSYBASE -U 用户名 -P 密码
#如果出现如下内容,或者类似内容,表示连接成功,此时可以执行一些SQL语句试试
locale is "en_US.utf8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>
下载unixODBC
$:wget -c ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.0.tar.gz
安装
$tar zxvf unixODBC-2.3.2.tar.gz
$cd unixODBC-2.3.2
$./configure
$make && make install
配置
#创建驱动的模板文件1.txt 内容如下:
[TDS]
Description = Sybase
Setup = /usr/lib/libtdsS.so
Driver64 = /usr/local/freetds/lib/libtdsodbc.so
Driver = /usr/local/freetds/lib/libtdsodbc.so
setup64 = /usr/lib64/libtdsS.so
FileUsage = 1
UsageCount = 2
#然后使用odbcinst安装驱动:
odbcinst -i -d -f 1.txt
# 如果这一步报odbcinst:error while loading shared libraries: libodbcinst.so.1: cannot open shared object file: No such file or directory 执行 `ldconfig`
$:ldconfig
# 继续执行 odbcinst -i -d -f 1.txt
# 出现以下内容:
odbcinst: Driver installed. Usage count increased to 1.
Target directory is /etc
# 可以检查一下/etc/odbcinst.ini,如果可以看到TDS的内容,说明配置没问题
#也可以用odbcinst -q -d 检查驱动
#创建数据源的模板文件,内容如下:
[MYSYBASE]
Driver = TDS
Descrption = Sybase Server
Trace = No
Server = IP地址
Database = 数据库
Port = 端口号
#这里的Database,IP地址和端口号替换成自己需要的即可
odbcinst -i -s -f 2.txt
#执行完成以后,会在用户的home目录下生成.odbc.ini的文件,vim ~/.odbc.ini检查一下文件内容即可。也可以用odbcinst -q -s检查 可用的数据源
#用isql测试连接: isql -v MYSYBASE 用户名 密码
#如果出现如下内容,说明连接成功了。
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
-linux系统安装pyodbc,pip安装不上,报错需要先安装unixODBC和unixODBC-devel
sudo apt-get install unixodbc unixodbc-dev
-Python连接
import pyodbc
conn=pyodbc.connect("DSN=xiaosu;UID=uid;pwd=password")
cursor=conn.cursor()
#输出数据库中所有表名
cursor.execute("select name from sysobjects where type ='U'")
for i in cursor:
print(i)

浙公网安备 33010602011771号