使用Python将数据从RESTAPI导入SQL DB的更好方法?

使用Python将数据从RESTAPI导入SQL DB的更好方法?,python,sql,azure,Python,Sql,Azure,我已经编写了一些python代码来从RESTAPI提取数据并将其加载到Azure SQL数据库中。但这一过程大约需要半个小时才能完成20000条线路。有没有更有效的方法?我在想,也许可以将数据提取为json文件,并将其放在blob storate中,然后使用azure数据工厂将数据加载到SQL中,但不知道如何以这种方式编码 def manualJournalLineItems(tenantid): endpoint = "api.xro/2.0/manualjournals/?page=1"

我已经编写了一些python代码来从RESTAPI提取数据并将其加载到Azure SQL数据库中。但这一过程大约需要半个小时才能完成20000条线路。有没有更有效的方法?我在想,也许可以将数据提取为json文件,并将其放在blob storate中,然后使用azure数据工厂将数据加载到SQL中,但不知道如何以这种方式编码

def manualJournalLineItems(tenantid):
endpoint = "api.xro/2.0/manualjournals/?page=1"

result = (getAPI(endpoint,token,tenantid))
page = 1
while result['ManualJournals']:
    endpoint = "api.xro/2.0/manualjournals/?page="+str(page)
    result = (getAPI(endpoint,token,tenantid))
    for inv in result['ManualJournals']:
        for li in inv['JournalLines']:
            cursor.execute("INSERT INTO [server].dbo.[Xero_ManualJournalLines](ManualJournalID,AccountID,Description,LineAmount,TaxAmount,AccountCode,Region) VALUES(?,?,?,?,?,?,?)",inv['ManualJournalID'],li['AccountID'],li.get('Description',''),li.get('LineAmount',0),li.get('TaxAmount',0),li.get('AccountCode',0),tenantid)
            conn.commit()
    page = int(page)+1

如果Python不是强制性要求,那么可以使用Data Factory。 您将需要使用以下组件创建管道:

  • “复制数据”活动
  • 源数据集(RESTAPI)
  • 接收器数据集(Azure SQL)
**我还可以知道您的RESTAPI托管在哪里吗?是否通过应用程序服务在Azure中?如果没有,您还需要设置[自托管集成运行时]

您可以参考将数据从Blob存储复制到Azure SQL的步骤

您还可以按照下面我的截图创建RESTAPI作为源代码

  • 创建一个新管道
  • 在“活动”搜索框中键入“复制”。将“复制数据”活动拖到管道中

  • 单击“源”选项卡,然后单击“新建”以创建新的源数据集。

  • 在“数据源”搜索框中键入“REST”。

  • 在“REST”数据集窗口中,单击“连接”选项卡。单击“新建”创建指向RESTAPI的链接服务。

  • 这里将凭证填写到REST API。

  • 继续设置接收器数据集以指向Azure SQL,并测试您的管道以确保其正常工作。希望有帮助


  • 如果Python不是强制性要求,那么可以使用Data Factory。 您将需要使用以下组件创建管道:

    • “复制数据”活动
    • 源数据集(RESTAPI)
    • 接收器数据集(Azure SQL)
    **我还可以知道您的RESTAPI托管在哪里吗?是否通过应用程序服务在Azure中?如果没有,您还需要设置[自托管集成运行时]

    您可以参考将数据从Blob存储复制到Azure SQL的步骤

    您还可以按照下面我的截图创建RESTAPI作为源代码

  • 创建一个新管道
  • 在“活动”搜索框中键入“复制”。将“复制数据”活动拖到管道中

  • 单击“源”选项卡,然后单击“新建”以创建新的源数据集。

  • 在“数据源”搜索框中键入“REST”。

  • 在“REST”数据集窗口中,单击“连接”选项卡。单击“新建”创建指向RESTAPI的链接服务。

  • 这里将凭证填写到REST API。

  • 继续设置接收器数据集以指向Azure SQL,并测试您的管道以确保其正常工作。希望有帮助


  • 找到了答案。将()值附加到列表中,并将该列表插入到SQL中,executemany()找到了答案。将()值附加到列表中,并使用executemany()将列表插入SQL中。

    我确实将data factory用于其他ETL进程,但data factory不能很好地处理分页。因此,我的python脚本实际上是一种变通方法,因为data factory无法在此脚本上完成工作。我在Azure上开了一张罚单,他们无法帮助我在他们的产品上实现这一点。而且我很难将Oauth2和刷新令牌集成到数据工厂中。嘿,乔,对不起,我可能误解了你的问题。还以为您还没有试用过Data Factory;)。很高兴知道你所经历的这些事情。我很想了解更多其他人可以提供的解决方案。我确实在其他ETL过程中使用data factory,但data factory不能很好地处理分页。因此,我的python脚本实际上是一种变通方法,因为data factory无法在此脚本上完成工作。我在Azure上开了一张罚单,他们无法帮助我在他们的产品上实现这一点。而且我很难将Oauth2和刷新令牌集成到数据工厂中。嘿,乔,对不起,我可能误解了你的问题。还以为您还没有试用过Data Factory;)。很高兴知道你所经历的这些事情。我很想了解更多其他人可以提供的解决方案。