我已经为Salesforce安装了CData ODBC驱动程序,并且能够通过用户名、密码和安全令牌连接Salesforce。我也想通过OAuth访问。我已经完成了下面链接中提到的所有步骤。我们怎样才能走得更远。
http://cdn.cdata.com/help/RFE/odbc/pg_oauth.htm
这是我的代码,通过用户名、密码和Security Token连接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()
您需要的说明在文档中(也复制到下面(: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流。该过程的说明可以在"帮助"的Unix ODBC部分找到(http://cdn.cdata.com/help/RFE/odbc/pg_unixODBConlinux.htm)但也在下面复制。
从文档复制的说明
创建连接的应用程序
获取OAuth客户端凭据、使用者密钥和使用者秘密:
- 登录Salesforce.com
- 在"设置"中,在"快速查找"框中输入"应用程序",然后单击链接创建应用程序
- 在结果页面的"已连接的应用程序"部分,单击"新建"。输入用户登录以授予您的应用程序权限时要显示的名称,以及联系人电子邮件地址
- 单击启用OAuth设置,然后在回调URL框中输入一个值。如果您正在制作桌面应用程序,请将回调URL设置为http://localhost:33333或者您选择的其他端口号。如果您正在制作web应用程序,请将回调URL设置为您的web应用程序上的一个页面,您希望用户在授权您的应用程序后返回该页面
- 选择应用程序应向用户请求的权限范围
- 单击你的应用程序名称打开一个包含应用程序信息的页面。将显示OAuth客户端凭据、使用者密钥和使用者机密
从桌面应用程序向Salesforce进行身份验证
设置以下连接属性后,即可进行连接:
- OAuthClientId:在应用程序设置中设置为使用者密钥
- OAuthClientSecret:在应用程序设置中设置为使用者机密
- 回调URL:设置为应用程序设置中的回调URL
- InitiateOAuth:设置为GETANDRREFRESH。您可以使用InitiateOAuth来避免重复OAuth交换和手动设置OAuthAccessToken连接属性
连接时,驱动程序会在默认浏览器中打开OAuth端点。登录并授予应用程序权限。然后,驱动程序完成以下OAuth过程:
- 获取回调URL并设置访问令牌和OAuthServerUrl以验证请求
- 将OAuth值保存在OAuthSettingsLocation中,以便在连接之间持久化
- 将返回的刷新令牌交换为新的有效访问令牌
使用unixODBC
定义DSN
通过向
odbc.ini
或.odbc.ini
添加条目来创建DSN。以下是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"
在此处输入代码在连接字符串中进行如下更改
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';")