2016-11-14 9 views
0

pandasデータフレームにquery_resultの出力を挿入するにはどうすればよいですか?クエリ結果は最初に500個のレコードを取得し、残りのレコードが取得されるQueryMoreを使用します。 dfのすべてを列名とともに押すことができません。sfdc select pandas dataframe

#!/usr/bin/env python3 

import beatbox 
import sqlalchemy 

engine_str = 'mysql+mysqlconnector://db-user:[email protected]/db-name' 
engine = sqlalchemy.create_engine(engine_str, echo=False, encoding='utf-8') 
connection = engine.connect() 

sf = beatbox._tPartnerNS 
service = beatbox.Client() 
def sync_user(objectSOQL): 
    service.login('sfdc-username', 'sfdc-creds') 
    query_result = service.query(objectSOQL) 
    while True: 
     for row in query_result[sf.records:]: 
      SQL_query = 'INSERT INTO user(' \ 
         'id, ' \ 
         'name, ' \ 
         'department, ' \ 
         'sales_team) ' \ 
         'VALUES(' \ 
         '\"{}\",\"{}\",\"{}\",\"{}\"' \ 
         ') ON DUPLICATE KEY UPDATE '\ 
         'name = VALUES(name), '\ 
         'department = VALUES(department), '\ 
         'sales_team = VALUES(sales_team) '\ 
         .format(
         row[2], 
         row[3], 
         row[4], 
         row[5] 
         ) 
      # SQL_query = SQL_query.replace('\"None\"', 'NULL') 

      try: 
       connection.execute(SQL_query) 
      except Exception as e: 
       print(id, e) 

     if str(query_result[sf.done]) == 'true': 
      break 
     query_result = service.queryMore(str(query_result[sf.queryLocator])) 

if __name__ == "__main__": 
    SOQL = 'SELECT id, Name, Department, Sales_Team__c FROM User' 
    sync_user(SOQL) 

答えて