我正在研究Google BigQuery的python客戶端。 我正在編寫一個程序來自動創建/導出表格。python - 將字符串分配給字段對象
一切工作正常,但有一個小問題 - 我想借此在表的架構作爲來自用戶的輸入。
下面是表模式目前分配:
table.schema = (
bigquery.SchemaField('Name', 'STRING'),
bigquery.SchemaField('Gender', 'STRING'),
bigquery.SchemaField('Frequency', 'INTEGER')
)
它在代碼硬編碼。
我寫的代碼來處理用戶輸入並將其轉換成上述格式。
什麼我的代碼返回一個字符串 - bq_schema
- 它看起來像:
bigquery.SchemaField(Name, STRING),bigquery.SchemaField(Gender, STRING),bigquery.SchemaField(Frequency, INTEGER)
現在,當我嘗試這個字符串分配到表模式,
table.schema = (bq_schema)
我得到一個錯誤,說明Schema items must be fields
那麼,如何使根據用戶輸入的表架構的動態?
編輯:按照要求,在這裏用戶輸入轉換爲字符串代碼:
s_raw = raw_input('\n\nEnter the schema for the table in the following format- fieldName:TYPE, anotherField:TYPE\n')
s = s_raw.split(',')
schema = []
for obj in s:
temp = obj.split(':')
schema.append(temp[0])
schema.append(temp[1])
bq_schema = ''
for i in range(0, len(schema), 2):
bq_schema+=('bigquery.SchemaField(\'{}\', \'{}\'),'.format(schema[i], schema[i+1]))
你的代碼的返回不能是字符串確實如此。由於定義了架構'setter屬性':https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/bigquery/google/cloud/bigquery/table.py#L106,您可以看到它評估的是否所有字段都是'SchemaField'的實例,所以你沒有別的選擇,然後返回'SchemaField'值。你有沒有一個例子說明系統中的用戶輸入是什麼?你介意告訴我們你如何將這個輸入轉換成你之前提到的字符串? –
感謝您的幫助! 我已經在OP中添加了代碼 – noobcoder