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)
posted @ 2020-10-26 11:02  Python-永远滴神  阅读(547)  评论(0)    收藏  举报