2

我已经为 Salesforce 安装了 CData ODBC 驱动程序,并且能够通过用户名、密码和安全令牌连接 Salesforce。我也想通过 OAuth 访问。我已按照以下链接中提到的所有步骤进行操作。我们怎样才能走得更远。

http://cdn.cdata.com/help/RFE/odbc/pg_oauth.htm

这是我通过用户名、密码和安全令牌连接 Salesforce 并能够将数据保存在 csv 文件中的代码。如何通过 OAuth 做同样的事情?

import pyodbc
import csv
cnxn = pyodbc.connect("DRIVER={CData ODBC Driver for Salesforce};User=yourusername;Password=password;Security Token=security token;")
cursor = cnxn.cursor()
query = "SELECT * from AccountPartner"
cursor.execute(query)
csvfile=open('persons.csv','w', newline='')
obj=csv.writer(csvfile)
for row in cursor:
    print(row)
    obj.writerow(row)
csvfile.close()
4

2 回答 2

2

您需要的说明在文档的下方(也在下面复制):http ://cdn.cdata.com/help/RFE/odbc/pg_oauthcustomappcreate.htm

您需要在 Salesforce 中创建自定义应用程序,然后在连接字符串中设置规定的 OAuth 相关连接属性。创建连接的代码如下所示:

cnxn = pyodbc.connect("DRIVER={CData ODBC Driver for Salesforce};OAuthClientID=MY_CONSUMER_KEY;OAuthClientSecret=MY_CONSUMER_SECRET;OAuthCallbackURL=https://localhost:33333;InitiateOAuth=GETANDREFRESH;")

您可能需要先在 Python 之外测试连接并触发 OAuth 流。该过程的说明可以在帮助 ( http://cdn.cdata.com/help/RFE/odbc/pg_unixODBConlinux.htm ) 的 Unix ODBC 部分中找到,但也可以在下面复制。


从文档中复制的说明

创建连接的应用程序

要获取 OAuth 客户端凭据、使用者密钥和使用者密码:

  1. 登录 Salesforce.com。
  2. 在“设置”中,在“快速查找”框中输入“应用程序”,然后单击链接以创建应用程序。
  3. 在结果页面的 Connected Apps 部分中,单击 New。输入要在用户登录以授予应用程序权限时显示给用户的名称,以及联系人电子邮件地址。
  4. 单击启用 OAuth 设置并在回调 URL 框中输入一个值。如果您正在制作桌面应用程序,请将回调 URL 设置为http://localhost:33333或您选择的其他端口号。如果您正在制作 Web 应用程序,请将回调 URL 设置为 Web 应用程序上您希望用户在授权您的应用程序后返回的页面。
  5. 选择您的应用应向用户请求的权限范围。
  6. 单击您的应用名称以打开包含有关您的应用的信息的页面。将显示 OAuth 客户端凭据、使用者密钥和使用者密码。

从桌面应用程序向 Salesforce 进行身份验证

设置以下连接属性后,您就可以连接了:

  • OAuthClientId:在您的应用设置中设置为使用者密钥。
  • OAuthClientSecret:在您的应用设置中设置为使用者密码。
  • CallbackURL:在您的应用设置中设置为回调 URL。
  • InitiateOAuth:设置为 GETANDREFRESH。您可以使用 InitiateOAuth 来避免重复 OAuth 交换并手动设置 OAuthAccessToken 连接属性。

当您连接时,驱动程序会在您的默认浏览器中打开 OAuth 端点。登录并授予应用程序权限。然后驱动程序完成以下 OAuth 过程:

  1. 获取回调 URL 并设置访问令牌和OAuthServerUrl以对请求进行身份验证。
  2. 将 OAuth 值保存在OAuthSettingsLocation中以跨连接保持不变。
  3. 将返回的刷新令牌交换为新的有效访问令牌。

使用 unixODBC

定义 DSN

odbc.ini通过向或中添加条目来创建 DSN .odbc.ini。下面是一个示例 DSN 条目:

[CData Salesforce Source]
Driver=/opt/cdata/cdata-odbc-driver-for-salesforce/lib/libsalesforceodbc.x64.so
OAuthClientID=MY_CONSUMER_KEY
OAuthClientSecret=MY_CONSUMER_SECRET
OAuthCallbackURL=https://localhost:33333
InitiateOAuth=GETANDREFRESH

测试连接

您可以使用 unixODBC 测试工具 isql 从命令行对 Salesforce 执行 SQL 查询。测试连接时,使用 -v 标志从驱动程序管理器和驱动程序输出任何消息。

isql -v "CData Salesforce Source"
于 2020-02-25T14:16:20.730 回答
1

在此处输入代码在您的连接字符串中进行如下更改

cnxn = pyodbc.connect("DRIVER={CData ODBC DRIVER for
Salesforce};InitiateOAuth='GETANDREFRESH';OAuthClientId='myclient_id';OAuthClientSecret='my_secret';callbackurl='my_redirect_uri';oauthaccesstoken='my_access_token';oauthserverurl='server_url_returned_in_oauth';OAuthRefreshToken='refresh_token';")
于 2020-11-12T07:47:14.747 回答