在 Python 中使用 pyodbc 从 Salesforce 摄取到 Azure SQL 时出现数据类型问题

Data Types problem while ingesting from Salesforce to Azure SQL using pyodbc in Python

我正在使用 Python 和 pyodbc 将数据从 Salesforce 提取到 Azure SQL 数据库。

我第一次连接 Salesforce,如下所示:

cnxn = pyodbc.connect('DRIVER={Devart ODBC Driver for Salesforce};User ID=xxx;Password=xxx;Security Token=xxx')

然后导入Salesforce数据,如下图:

cursor = cnxn.cursor()
cursor.execute("select * from X where Y > 'VALUE'")
row = cursor.fetchall()

之后,我与目标 Azure SQL 数据库建立了第二个连接,如下所示:

cnxn = pyodbc.connect('DRIVER={Devart ODBC Driver for SQL Azure};Server=xxx;Database=xxx;Port=1433;User ID=xxx;Password=xxx')

到目前为止,一切正常。但是当我尝试插入从 Salesforce 获得的输出(在可变行中)时,我遇到了数据类型问题,我们可以从中引用:

以下是我启动插入查询的方式:

cursor.executemany('INSERT INTO dbo.Account (Column_a,Column_b,Column_c) VALUES (?,?,?,?)', row)
cursor.commit()

这是我遇到的第一个错误:

pyodbc.Error: ('HY000', '[HY000] [Devart][ODBC][Microsoft SQL Azure]Statement(s) could not be prepared.\r\nMust declare the scalar variable "@_39".\r\nLine 1: Specified scale 14 is invalid. (0) (SQLExecDirectW)')

这个问题显然是由

中的缺陷引起的
Devart ODBC Driver for SQL Azure

使用微软的

ODBC Driver 17 for SQL Server

解决了问题。