Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在RHEL-like Docker映像中更新FreeTDS驱动程序?_Python_Sql Server_Pyodbc_Freetds - Fatal编程技术网

Python 如何在RHEL-like Docker映像中更新FreeTDS驱动程序?

Python 如何在RHEL-like Docker映像中更新FreeTDS驱动程序?,python,sql-server,pyodbc,freetds,Python,Sql Server,Pyodbc,Freetds,我正在使用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.con

我正在使用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),以便在插入emojis(related:)时避开一个bug

更新:在访问docker映像中的CLI后,我运行tsql-C以获取编译时设置:

Version: freetds v1.1.20

显然,Dockerfile已经具备了安装pyodbc所需的命令。因此,您的容器应该已经具有

  • gcc-c++
  • 蟒蛇3
  • unixODBC-devel
现在,您的Dockerfile不需要从EPEL(或任何地方)安装freetds,而是需要执行以下操作(在编写本文时使用最新的freetds稳定版本):

curlhttps://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/
/配置
制作
sudo制作安装
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连接,如下所示:

导入pyodbc >>>cnxn=pyodbc.connect(“DRIVER=FreeTDS_1.2.18;SERVER=192.168.0.179;PORT=49242;UID=sa;PWD=u) >>>打印(cnxn.execute(“选择@@VERSION”).fetchval() Microsoft SQL Server 2017(RTM-GDR)(KB4583456)-14.0.2037.2(X64) 2020年11月2日19:19:59 版权所有(C)2017微软公司 Windows 8.1 Pro 6.3(版本9600:)上的快速版(64位) >>>打印(cnxn.getinfo(pyodbc.SQL\u驱动程序\u名称)) libtdsodbc.so >>>打印(cnxn.getinfo(pyodbc.SQL\u驱动程序版本)) 01.02.0018
您使用的是什么风格的Linux?Debian…?瑞尔@GordThompson我正在使用Docker,我应该将dockerfile代码添加到此文件中吗?它在中使用带有freeTDS的yum命令it@GordThompson进入docker映像的CLI后,我运行tsql-C以获取编译时设置。我正在使用FreeTDSV1.1.20,这是否仍然会导致驱动程序截断问题?显然是这样。表示版本1.1.23中包含该修复程序。