#python #salesforce #azure-sql-database #pyodbc #devart
#python #salesforce #azure-sql-database #pyodbc #devart
Вопрос:
Я передаю данные из Salesforce в базу данных SQL Azure, используя Python с pyodbc.
Я устанавливаю первое соединение с 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()
После этого я устанавливаю второе соединение с местом назначения, которым является база данных SQL Azure, как показано ниже:
cnxn = pyodbc.connect('DRIVER={Devart ODBC Driver for SQL Azure};Server=xxx;Database=xxx;Port=1433;User ID=xxx;Password=xxx')
До сих пор все работает нормально. Но когда я пытаюсь вставить выходные данные, полученные из Salesforce (в переменной строке) Я сталкиваюсь с проблемами типов данных, из которых мы можем привести:
- Таблицы » t»
- Вернемся к знаку строки (в базе данных SQL Azure — CHAR(13) CHAR(10) )
- Символы, содержащие кавычки (например, «технология больших данных»)
Вот как я запускаю запрос вставки:
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.rnMust declare the scalar variable "@_39".rnLine 1: Specified scale 14 is invalid. (0) (SQLExecDirectW)')
Комментарии:
1. Для подключения к Azure вы можете попробовать использовать Microsoft «Драйвер ODBC 17 для SQL Server» и посмотреть, работает ли это лучше? Проблема со строками, содержащими одинарные кавычки, даже при использовании параметризованного запроса, заставляет меня подозревать ошибку в драйвере Devart.
2. Также обратите внимание, что использование
INSERT INTO table_name VALUES …
(без списка столбцов) считается дурным тоном. Вы действительно должны использоватьINSERT INTO table_name (col_a, col_b, col_c, col_d) VALUES (?,?,?,?)
Ответ №1:
Эта проблема, по-видимому, была вызвана дефектом в
Devart ODBC Driver for SQL Azure
Использование Microsoft
ODBC Driver 17 for SQL Server
решена проблема.