使用Google云函数写入Google cloud扳手时出错

2024-04-25 16:45:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用云函数将数据插入到云扳手表中,但它抛出给定的错误下面。阅读来自cloud spanner的数据工作正常,但使用数据定义语言命令和批处理插入方法都抛出相同的错误。我在想这是某种权限问题!我不知道怎么修?在

需求文件只包含google云扳手==1.7.1

在云函数中运行的代码

import json
from google.cloud import spanner
INSTANCE_ID = 'AARISTA'
DATABASE_ID = 'main'
TABLE_NAME = 'userinfo'
dataDict = None

def new_user(request):
    dataDict = json.loads(request.data)# Data is available in dict format
    if dataDict['USER_ID']==None:
       return "User id empty"
    elif dataDict['IMEI'] == None:
       return "Imei number empty"
    elif dataDict['DEVICE_ID'] == None:
       return "Device ID empty"
    elif dataDict['NAME'] == None:
       return "Name field is empty"
    elif dataDict['VIRTUAL_PRIVATE_KEY']== None:
       return "User's private key cant be empty"  
    else:
       return insert_data(INSTANCE_ID,DATABASE_ID)

def insert_data(instance_id, database_id):
      spanner_client = spanner.Client()
      instance = spanner_client.instance(instance_id)
      database = instance.database(database_id)
      def insert_user(transcation):
          row_ct= transcation.execute_update("INSERT userinfo 
                   (USER_ID,DEVICE_ID,IMEI,NAME,VIRTUAL_PRIVATE_KEY) VALUES"
                                   "("+dataDict['USER_ID']+', 
                 '+dataDict['DEVICE_ID']+', '+ dataDict['IMEI']+', 
                 '+dataDict['NAME']+', 
             '+dataDict['VIRTUAL_PRIVATE_KEY']+")")

      database.run_in_transaction(insert_user)
      return 'Inserted data.'

云函数的错误日志

^{pr2}$

Tags: 数据instance函数namenoneiddatareturn
1条回答
网友
1楼 · 发布于 2024-04-25 16:45:28

我试图复制这个函数,但它似乎对我来说是一个python3.7函数。我在中使用了最新的google-cloud-spanner库要求.txt. 在

虽然我不确定什么会导致你的错误,但我注意到了一些其他的事情。在

  • 声明一个全局dataDict而不使用构造的并传递它的数据似乎很奇怪。相反,我将其作为参数添加到insert方法中。在
  • 查询的间距有点奇怪,单引号和双引号的使用也很奇怪。这使得视觉分析变得困难。当函数以python3.7运行时,您还可以使用f-strings,这可能会使它更具可读性。在

这是我在一个似乎有效的函数中运行的代码。在

import json
from google.cloud import spanner
INSTANCE_ID = 'testinstance'
DATABASE_ID = 'testdatabase'
TABLE_ID = 'userinfo'

def new_user(request):
    data = { 'USER_ID': '10', 'DEVICE_ID': '11' }  
    return insert_data(INSTANCE_ID, DATABASE_ID, data)

def insert_data(instance_id, database_id, data):
    spanner_client = spanner.Client()
    instance = spanner_client.instance(instance_id)
    database = instance.database(database_id)

    def insert_user(transaction):
        query = f"INSERT {TABLE_ID} (USER_ID,DEVICE_ID) VALUES ({data['USER_ID']},{data['DEVICE_ID']})"
        row_ct = transaction.execute_update(query)

    database.run_in_transaction(insert_user)
    return 'Inserted data.'

相关问题 更多 >