如何在 RHEL 类 Docker 映像中更新 FreeTDS 驱动程序?
How do I update FreeTDS driver in RHEL-like Docker image?
我正在使用 pyodbc 将一些表情符号数据从 postgres 数据库对象传递到 SQL Server 2016。
第 5 行有我正在使用的 freeTDS 驱动程序。
def __insert_records(self, rows, target_fields):
try:
mssql_connection = BaseHook.get_connection(self.mssql_conn_id)
connection = pyodbc.connect(DRIVER='FreeTDS',host=mssql_connection.host,DATABASE=mssql_connection.schema,user=mssql_connection.login,password=mssql_connection.password,ClientCharset='utf-8',port=mssql_connection.port,driver='/usr/lib64/libtdsodbc.so')
cursor = connection.cursor()
for i, row in enumerate(rows, 1):
record = []
for cell in row:
record.append(self._serialize_cell(cell))
record_dictionary = self.__get_record_dictionary(record, target_fields)
cursor.execute(self.__generate_insert_sql_statement(record_dictionary))
connection.commit()
cursor.close()
connection.close()
except pyodbc.ProgrammingError as programmingError:
sqlstate = programmingError.args[0]
if sqlstate = '42000':
print(programmingError.args[0])
我需要更新驱动程序 (freeTDS) 以便在插入表情符号时解决一个错误(相关:https://github.com/FreeTDS/freetds/issues/317)。
更新:访问我的 docker 图像中的 CLI 后,我 运行 tsql -C 获取我的编译时间设置:
Version: freetds v1.1.20
显然您的 Dockerfile 已经包含安装 pyodbc 所需的命令。因此你的容器应该已经有
- gcc-c++
- python3-开发
- unixODBC-devel
现在,无需从 EPEL(或任何地方)安装 freetds,您的 Dockerfile 将需要执行以下操作(在撰写本文时使用最新稳定版本的 FreeTDS):
curl https://www.freetds.org/files/stable/freetds-1.2.18.tar.gz > freetds-1.2.18.tar.gz
tar -xvzf freetds-1.2.18.tar.gz
cd freetds-1.2.18/
./configure
make
sudo make install
echo "" | sudo tee -a /etc/odbcinst.ini > /dev/null
echo "[FreeTDS_1.2.18]" | sudo tee -a /etc/odbcinst.ini > /dev/null
echo "Driver=/usr/local/lib/libtdsodbc.so" | sudo tee -a /etc/odbcinst.ini > /dev/null
那么您应该能够像这样创建一个 pyodbc 连接:
>>> import pyodbc
>>> cnxn = pyodbc.connect("DRIVER=FreeTDS_1.2.18;SERVER=192.168.0.179;PORT=49242;UID=sa;PWD=_whatever_;")
>>> print(cnxn.execute("SELECT @@VERSION").fetchval())
Microsoft SQL Server 2017 (RTM-GDR) (KB4583456) - 14.0.2037.2 (X64)
Nov 2 2020 19:19:59
Copyright (C) 2017 Microsoft Corporation
Express Edition (64-bit) on Windows 8.1 Pro 6.3 <X64> (Build 9600: )
>>> print(cnxn.getinfo(pyodbc.SQL_DRIVER_NAME))
libtdsodbc.so
>>> print(cnxn.getinfo(pyodbc.SQL_DRIVER_VER))
01.02.0018
我正在使用 pyodbc 将一些表情符号数据从 postgres 数据库对象传递到 SQL Server 2016。
第 5 行有我正在使用的 freeTDS 驱动程序。
def __insert_records(self, rows, target_fields):
try:
mssql_connection = BaseHook.get_connection(self.mssql_conn_id)
connection = pyodbc.connect(DRIVER='FreeTDS',host=mssql_connection.host,DATABASE=mssql_connection.schema,user=mssql_connection.login,password=mssql_connection.password,ClientCharset='utf-8',port=mssql_connection.port,driver='/usr/lib64/libtdsodbc.so')
cursor = connection.cursor()
for i, row in enumerate(rows, 1):
record = []
for cell in row:
record.append(self._serialize_cell(cell))
record_dictionary = self.__get_record_dictionary(record, target_fields)
cursor.execute(self.__generate_insert_sql_statement(record_dictionary))
connection.commit()
cursor.close()
connection.close()
except pyodbc.ProgrammingError as programmingError:
sqlstate = programmingError.args[0]
if sqlstate = '42000':
print(programmingError.args[0])
我需要更新驱动程序 (freeTDS) 以便在插入表情符号时解决一个错误(相关:https://github.com/FreeTDS/freetds/issues/317)。
更新:访问我的 docker 图像中的 CLI 后,我 运行 tsql -C 获取我的编译时间设置:
Version: freetds v1.1.20
显然您的 Dockerfile 已经包含安装 pyodbc 所需的命令。因此你的容器应该已经有
- gcc-c++
- python3-开发
- unixODBC-devel
现在,无需从 EPEL(或任何地方)安装 freetds,您的 Dockerfile 将需要执行以下操作(在撰写本文时使用最新稳定版本的 FreeTDS):
curl https://www.freetds.org/files/stable/freetds-1.2.18.tar.gz > freetds-1.2.18.tar.gz
tar -xvzf freetds-1.2.18.tar.gz
cd freetds-1.2.18/
./configure
make
sudo make install
echo "" | sudo tee -a /etc/odbcinst.ini > /dev/null
echo "[FreeTDS_1.2.18]" | sudo tee -a /etc/odbcinst.ini > /dev/null
echo "Driver=/usr/local/lib/libtdsodbc.so" | sudo tee -a /etc/odbcinst.ini > /dev/null
那么您应该能够像这样创建一个 pyodbc 连接:
>>> import pyodbc
>>> cnxn = pyodbc.connect("DRIVER=FreeTDS_1.2.18;SERVER=192.168.0.179;PORT=49242;UID=sa;PWD=_whatever_;")
>>> print(cnxn.execute("SELECT @@VERSION").fetchval())
Microsoft SQL Server 2017 (RTM-GDR) (KB4583456) - 14.0.2037.2 (X64)
Nov 2 2020 19:19:59
Copyright (C) 2017 Microsoft Corporation
Express Edition (64-bit) on Windows 8.1 Pro 6.3 <X64> (Build 9600: )
>>> print(cnxn.getinfo(pyodbc.SQL_DRIVER_NAME))
libtdsodbc.so
>>> print(cnxn.getinfo(pyodbc.SQL_DRIVER_VER))
01.02.0018