使用Python将数据从RESTAPI导入SQL DB的更好方法?
我已经编写了一些python代码来从RESTAPI提取数据并将其加载到Azure SQL数据库中。但这一过程大约需要半个小时才能完成20000条线路。有没有更有效的方法?我在想,也许可以将数据提取为json文件,并将其放在blob storate中,然后使用azure数据工厂将数据加载到SQL中,但不知道如何以这种方式编码使用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"
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)
如果Python不是强制性要求,那么可以使用Data Factory。 您将需要使用以下组件创建管道:
- “复制数据”活动
- 源数据集(RESTAPI)
- 接收器数据集(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;)。很高兴知道你所经历的这些事情。我很想了解更多其他人可以提供的解决方案。