如何使用Python客户端库将数据批量上传到Google Cloud Spanner?

时间:2019-02-14 04:16:38

标签: python-3.x google-cloud-platform google-cloud-functions google-cloud-spanner

我想将熊猫数据框的内容向上插入Google Cloud Spanner数据库的表中。文档here建议使用批处理对象的insert_or_update()方法。

如果批处理对象是通过运行此对象创建的

from google.cloud import spanner_v1
client = spanner_v1.Client()
batch = client.batch()

然后该对象没有可用的方法。运行dir(client)可以给我带来这些结果

['SCOPE', 
'_SET_PROJECT', 
'__class__', 
'__delattr__', 
'__dict__', 
'__dir__', 
'__doc__', 
'__eq__', 
'__format__', 
'__ge__', 
'__getattribute__', 
'__getstate__', 
'__gt__', 
'__hash__', 
'__init__', 
'__init_subclass__', 
'__le__', 
'__lt__', 
'__module__', 
'__ne__', 
'__new__', 
'__reduce__', 
'__reduce_ex__', 
'__repr__', 
'__setattr__', 
'__sizeof__', 
'__str__', 
'__subclasshook__', 
'__weakref__', 
'_credentials', 
'_database_admin_api', 
'_determine_default', 
'_http', 
'_http_internal', 
'_instance_admin_api', 
'_item_to_instance', 
'copy', 
'credentials', 
'database_admin_api', 
'from_service_account_json', 
'instance', 
'instance_admin_api', 
'list_instance_configs', 
'list_instances', 
'project', 
'project_name', 
'user_agent']

如何在Spanner中批量批量添加?

2 个答案:

答案 0 :(得分:3)

摘录中有一个批量插入的示例。我检查了代码段中创建的批处理对象是否还具有insert_or_update字段。

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/spanner/cloud-client/snippets.py#L72

[' class ',' delattr ',' dict ',' doc ','< strong>输入”,“ 退出”,“ 格式”,“ 获取属性”,“ 哈希”,“ 初始化”,“ 模块”,“ ”,“ 减少”,“ reduce_ex ”,“ 代表”,“ setattr ”,“ sizeof ”,“ str ” ','子类挂钩','弱引用”,“ _ check_state”,“ _ mutations”,“ _ session”,“ commit”,“ committed”,“ delete”,“ insert” ','insert_or_update','replace','update']

您可以尝试一下吗?

答案 1 :(得分:3)

如果您有pandas数据框,这里是5 x 3的a,b,c列,则可以将数据框转换为列名,行和批处理插入。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 3)),
                  columns=['a', 'b', 'c'])

您可以通过从df中提取列和值并批量插入来将其插入Google Cloud Spanner。

from google.cloud import spanner

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

columns = df.columns
values = df.values.tolist()

with database.batch() as batch:
    batch.insert(
        table='table',
        columns=columns
        values=values
    )