https://developers.google.com/apis-explorer/?hl=en_US#p/sqladmin/v1beta4/sql.instances.import
INFO:root:{'kind': 'sql#operation', 'selfLink': 'https://www.googleapis.com/sql/v1beta4/projects/REDACTED', 'targetProject': 'statistics-198910', 'targetId': 'invitationsdata-staging', 'targetLink': 'https://www.googleapis.com/sql/v1beta4/projects/REDACTED', 'name': 'f63f4b33-0e67-4a11-9b8e-156f5c13c0b0', 'operationType': 'IMPORT', 'status': 'DONE', 'user': 'REDACTED', 'insertTime': '2018-04-04T08:52:24.182Z', 'startTime': '2018-04-04T08:52:24.277Z', 'endTime': '2018-04-04T08:52:34.467Z', 'error': {'kind': 'sql#operationErrors', 'errors': [{'kind': 'sql#operationError', 'code': 'INTERNAL_ERROR'}]}, 'importContext': {'kind': 'sql#importContext', 'uri': 'gs://REDACTED.csv', 'database': 'trustpilot'}}
from google.oauth2 import service_account
import googleapiclient.discovery
from time import sleep
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = 'SOMEPLACE'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE)
service = googleapiclient.discovery.build('sqladmin', 'v1beta4', credentials=credentials)
instance_id = 'REDACTED'
project_id = "REDACTED"
def upload():
processed = False
while processed == False:
try:
instances_import_request_body = {
"importContext": {
"kind": "sql#importContext",
"uri": "REDACTED",
"database": "trustpilot",
"csvImportOptions": {
"table": 'invitations'
}
}
}
request = service.instances().import_(project=project_id, instance=instance_id, body=instances_import_request_body)
response = request.execute()
logger.info("Request made ...")
process_status = False
while not process_status:
sleep(1)
logger.info("Checking with GS")
resp = service.operations().get(project=project_id, operation=response['name']).execute()
logger.info(resp)
if resp['status'] == "DONE":
logger.info("Request completed.")
process_status = True
processed=True
except Exception as err:
logger.info("Error: {}".format(err.args))
logger.info("Probably an operation is in progress. Retrying after 5 seconds.")
sleep(5)
upload()